2017-02-23 160 views
2

是否有任何方式获取C++构造函数的参数?获取类的构造函数参数

template <typename T> 
class Test { 
public: 
    // Get the constructor arguments from class T 
    Test(constructor<T>()); 

private: 
    T* value_; 
}; 

template <typename T> 
Test(constructor<T>()) { 
    value_ = new T(constructor); 
} 

int main() { 
    // std::string can be initialized by string literal 
    Test<std::string> test("Text"); 
    return 0; 
} 

我知道我可以只使用T的说法,但我并不想通过对象本身,只是它需要的参数。

无论如何在标准C++中做到这一点?

+1

[C++获取构造函数的类型]的可能副本(http://stackoverflow.com/questions/41623899/c-obtaining-the-type-of-a-constructor) –

+0

是[this](http: //ideone.com/GvbUyX)你在找什么? –

回答

1

我不知道什么是“香草” C++是的,但你可以做的是接受它的其他类允许任何参数,并将它们转发:

template <typename T> 
class Test { 
public: 
    template <class... Args, 
     std::enable_if_t<std::is_constructible<T, Args&&...>::value, int> = 0> 
    Test(Args&&... args) 
     : value_(std::forward<Args>(args)...) 
    { } 

    Test(T&& val) 
     : value_(std::move(val)) 
    { } 

private: 
    T value_; 
}; 

第二个构造有允许通过一个括号初始化列表到Test构造函数中。这仍然不是一个完美的替身,但它非常好。