abr*_*ert 13 c++ lvalue rvalue-reference type-deduction
我尝试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.
};
Run Code Online (Sandbox Code Playgroud)
在这里,我希望_elem有一个类型T,以防构造函数的参数elem是一个r值或者T&case中的类型elem是一个l值.
有谁知道这是如何实现的?
Tar*_*ama 12
在我们获得类模板的模板参数推导之前,您需要使用辅助函数:
template <typename T>
auto make_a (T&& elem) {
return A<T>{std::forward<T>(elem)};
}
Run Code Online (Sandbox Code Playgroud)
这使用转发引用来推断参数是左值还是右值,并A通过完美转发参数来构造.以int作为一个例子,如果一个左值通过,T将是int&,如果一个右值被传递,T会int.
您的A模板应该如下所示:
template< typename T >
class A
{
public:
A( T elem )
: _elem( elem )
{}
private:
T _elem;
};
Run Code Online (Sandbox Code Playgroud)
make_a如果你只想从工厂方法允许构造,你可以结交朋友并使构造函数成为私有.
| 归档时间: |
|
| 查看次数: |
347 次 |
| 最近记录: |