![](/img/trans.png)
[英]How to initialize member variable with super class type depending on constructor argument?
[英]Type of member variable should depend on constructor argument's type
我嘗試按如下方式定義A
類:
template< typename T >
class A
{
public:
A( T elem )
: _elem( elem )
{}
private:
TYPE _elem; // "TYPE" should be either "T" in case "elem" is an r-value or "T&" in case "elem" is an l-value.
};
在這里,我希望_elem
具有類型T
,以防構造函數的參數elem
是r值,或者類型T&
如果elem
是l值。
有誰知道這是如何實現的?
在我們獲得類模板的模板參數推導之前 ,您需要使用輔助函數:
template <typename T>
auto make_a (T&& elem) {
return A<T>{std::forward<T>(elem)};
}
這使用轉發引用來推斷參數是左值還是右值,並通過完美轉發參數來構造A
以int
為例,如果傳遞左值,則T
將為int&
,如果傳遞了右值,則T
將為int
。
你的A
模板應如下所示:
template< typename T >
class A
{
public:
A( T elem )
: _elem( elem )
{}
private:
T _elem;
};
如果你只想從工廠方法允許構造,你可以使make_a
成為朋友並使構造函數成為私有的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.