我目前正在使用第is_call_possible
3 方代码
https://github.com/jaredhoberock/is_call_possible
在编译时确定成员是否可用。这个例子很好用:
#include <string>
#include "is_call_possible.h"
DEFINE_IS_CALL_POSSIBLE(is_call_possible, operator())
DEFINE_IS_CALL_POSSIBLE(test_available, test)
struct Foo {
void operator()(double) {}
double test(std::string) { return 0; }
};
int main(int argc, const char * argv[]) {
static_assert(is_call_possible<Foo, void(double)>::value,"err"); //success
static_assert(test_available<Foo, double(std::string)>::value,"err"); //success
return 0;
}
但这不适用于普通的非成员,所以我不能对输出和关系运算符做同样的事情:
DEFINE_IS_CALL_POSSIBLE(output_available, operator<<) //error
DEFINE_IS_CALL_POSSIBLE(less_available, operator<) //error
DEFINE_IS_CALL_POSSIBLE(greater_available, operator>) //error
你能指出我方便的第 3 方代码(或你自己的代码)来适应这个吗?
如果更容易的话,可以在 C++11 中实现底层解决方案(“第 3 方代码”),但我想我不会注意到我自己的代码(作为第 3 方代码的用户)的差异。