2016-07-15 12 views
-1

私は私の質問説明するために、次の例を与える:あなたは上記の例からもわかるように可変引数と変数型を処理できるC++関数を作成する方法は?

class A 
    { 
     public: 
     void process(int a, int b, int c) 
     { 
      std::cout<< "int a"<<a<<std::endl; 
      std::cout<< "int b"<<b<<std::endl; 
      std::cout<< "int c"<<c<<std::endl; 
     } 
    }; 
    class B 
    { 
     public: 
     void process(double a) 
     { 
      std::cout<< "double a"<<a<<std::endl; 

     } 
    }; 
struct ABC 
{ 
     float def; 

    }; 
class C 
    { 
     public: 
     void process(ABC a) 
     { 
      std::cout<< "float def in ABC"<<a.def<<std::endl; 

     } 
    }; 

を、class A, class B and Class Cは、関数内のすべての引数を印刷するために使用されているのと同じ機能processを、共有しています。しかし、引数の数だけでなく、引数の種類も変わる可能性があります。引数はプライマリC++型でもよく、ユーザーが定義した複雑なクラスでもかまいません。この場合、一般的な関数processをどのようにしてclass A, class B and Class Cで呼び出すことができますか。この

が最初のオブジェクト A :: object_name.processsを(宣言のような主機能の処理機能を使用する

+1

これは役立つかもしれない:http://en.cppreference.com/w/cpp/language/parameter_pack – lorro

+0

この一般的な機能は何をしますか? – melpomene

答えて

2

数、異なる種類:

#include<iostream> 

template<typename... T> 
void func(T... t) { 
    int arr[] = { (std::cout << t << std::endl, 0)... }; 
} 

int main() { func(1, .42, "foo"); } 
-1

使用スコープ解決演算子)。固定されていない引数の

+0

OPの質問には答えられず、あなたのコードは間違っています。 – melpomene

関連する問題