【发布时间】:2015-10-02 18:27:26
【问题描述】:
我正在尝试制作一个编译时泛型示例。我已经强制要求方法存在,但我不知道如何强制返回类型:
#include <type_traits>
template<class...> struct voider { using type = void; }
template<class... T> using void_t = typename voider<T...>::type;
template<class T, class = void> struct add_able : std::false_type {};
template<class T> struct add_able
< T, void_t < std::is_same < decltype(std::declval<T>().addOne()), void >,
std::is_same < decltype(std::declval<T>().subOne()), void > > >
: std::true_type {};
class A { public: int addOne(); void subOne(); } // compiles and runs
class B { public: void addOne(int); void subOne(); } // fails
class C { public: void addOne(); void subOne(); } // compiles and runs as expected
class D { public: void subOne(); } // fails
这确保存在addOne() 和subOne() 方法,但返回类型完全是任意的。我该如何执行?
【问题讨论】:
标签: c++ templates c++11 sfinae