是否可以编写一个模板来改变行为,具体取决于是否在类上定义了某个成员函数?
这是我想写的一个简单例子:
template<class T>
std::string optionalToString(T* obj)
{
if (FUNCTION_EXISTS(T->toString))
return obj->toString();
else
return "toString not defined";
}
Run Code Online (Sandbox Code Playgroud)
所以,如果class T
已经toString()
确定的话,就使用它; 否则,它没有.我不知道怎么做的神奇部分是"FUNCTION_EXISTS"部分.
是否可以编写c ++模板/宏来检查两个函数是否具有相同的签名(返回类型和参数列表)?
这是一个我想如何使用它的简单示例:
int foo(const std::string& s) {...}
int bar(const std::string& s) {...}
if (SAME_SIGNATURES(foo, bar))
{
// do something useful... make Qt signal-slot connection for example...
}
else
{
// signatures mismatch.. report a problem or something...
}
Run Code Online (Sandbox Code Playgroud)
那么它有可能或者只是一个白日梦吗?
PS其实我对c ++ 2003标准感兴趣.