2011-11-10 116 views
1

在代碼中(剛粘貼和拷貝)有沒有辦法來避免模板參數的個數重複/列表(行標代碼):可變參數模板 - 是有辦法避免重複

#include <iostream> 

using namespace std; 


template<class T,class... V> 
struct nullptr_ 
{ 
    nullptr_(T& obj,V&... args) 
    { 
     nullptr_hlp(obj,args...); 
    } 

    template<class A> 
    static void nullptr_hlp(A& a); 
    { 
     a = nullptr; 
    } 

    template<class A,class... Vs> 
    static void nullptr_hlp(A& a,Vs&... args) 
    { 
     a = nullptr; 
     nullptr_hlp(args...); 
    } 

}; 


class X : nullptr_<int*,double*,char*>//IS THERE A WAY TO HAVE JUST nullptr_? 
{ 

    int* a; 
    double* b; 
    char* c; 
    typedef nullptr_<decltype(a),decltype(b),decltype(c)> init_; 
public: 
    X():init_(a,b,c) 
    { 

    } 

}; 
int main() 
{ 
    X x; 
    return 0; 
} 
+3

如何只使用'的std ::組' ? –

+0

或者更好的是,在初始化列表中使用'a(),b(),c()'。 –

+0

@KerrekSB這不起作用。 – user336359

回答

4

nullptr_<int*,double*,char*>成爲內X注入類的名字,所以你可以參考它沒有參數列表:

class X : nullptr_<int*,double*,char*>//can't do away with the list here, unless you want to typedef it 
{ 

    int* a; 
    double* b; 
    char* c; 
    //typedef nullptr_<decltype(a),decltype(b),decltype(c)> init_; //don't really need this 
public: 
    X():nullptr_(a,b,c) //can be used without the argument list 
    { 

    } 
}; 
+0

謝謝,很好的答案。 – user336359

1

如何移動typedef從類到匿名命名空間並用於繼承?