/* * ========================================================================= * * FileName: c11_funargs.cpp * * Description: * * Version: 1.0 * Created: 2018-01-05 13:23:53 * Last Modified: 2019-09-03 11:50:08 * Revision: none * Compiler: gcc * * Author: zt () * Organization: * * ========================================================================= */ #include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <stddef.h> #include <errno.h> #include <unistd.h> #include <iostream> #include <memory> #include <algorithm> #include <vector> #include <map> #include <string> #include <functional> template <typename T1> void printarg ( T1 t ) { std::cout << t << std::endl; } template <typename ...Args> void expand ( Args... args ) { int arr[] = { ( printarg ( args ), 0 )...}; } template <typename ... Args> void Test ( Args... p ) { fprintf ( stderr, "num=%lu\n", sizeof... ( p ) ); } class A { public: A ( int a ) { std::cout << a << std::endl; } ~A() { } }; class B { public: B ( int a, int b ) { std::cout << a << " " << b << std::endl; } ~B() { } }; template <typename T, typename... Args> T* Instance ( Args&& ... args ) { return new T ( std::forward<Args> ( args )... ); } int main ( int argc, char* argv[] ) { ( void ) argc; ( void ) argv; //Test ( 1, 1 ); //expand ( "asdf", "ss", 22, 2.0 ); A* pa = Instance<A> ( 1 ); B* pB = Instance<B> ( 2, 3 ); return 0; }