Kra*_*nar 14 c++ type-traits c++11
我正在尝试编写一个模板,如果T有一个移动构造函数,则表现为单向,如果T没有,则表示另一种方式.我试图寻找一种可以识别这种情况的类型特征,但没有这样的运气,我为此编写自己的类型特征的尝试都失败了.
任何帮助赞赏.
Luc*_*ton 18
我觉得有必要指出一个微妙的区别.
虽然<type_traits>确实提供了std::is_move_constructible和std::is_move_assignable那些不完全检测类型是否具有移动构造函数(相应地,移动赋值运算符)或没有.例如,std::is_move_constructible<int>::value是true,并考虑以下情况:
struct copy_only {
copy_only(copy_only const&) {} // note: not defaulted on first declaration
};
static_assert( std::is_move_constructible<copy_only>::value
, "This won't trip" );
Run Code Online (Sandbox Code Playgroud)
请注意,用户声明的复制构造函数会抑制移动构造函数的隐式声明:甚至没有隐藏的,编译器生成的copy_only(copy_only&&).
类型特征的目的是促进泛型编程,因此根据表达式(缺少概念)来指定.std::is_move_constructible<T>::value问的问题是:例如T t = T{};有效吗?它不是要求(假设T这里是一个类类型)是否有一个T(T&&)(或任何其他有效形式)移动构造函数声明.
我不知道你要做什么,我没有理由不相信这std::is_move_constructible不适合你的目的.