2017-02-23 202 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構造函數中。這仍然不是一個完美的替身,但它非常好。