如果传递的模板类型中存在两个成员函数,则启用构造函数



使用下面的代码:

struct MyStructure {
MyStructure(char* d, int size) {}
template <typename T>
MyStructure(T&& rhs) : MyStructure(rhs.data(), rhs.size()) {}
};

如果datasize函数存在于传入的任何对象中,我如何才能只启用第二个构造函数?

Sam Varshavchik的意思是,这应该在c++ 11中工作:

struct MyStructure {
MyStructure(char* d, int size) {}
template <typename T, 
decltype(static_cast<char*>(std::declval<T &&>().data())) = nullptr,
decltype(static_cast<int>(std::declval<T &&>().size())) = 0
>
MyStructure(T&& rhs) : MyStructure(rhs.data(), rhs.size()) {}
};

相关内容

最新更新