是否可以编写一个模板来改变行为,具体取决于是否在类上定义了某个成员函数?
这是我想写的一个简单例子:
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"部分.
说我有一个模板类:
template <typename T>
class foo {
void do_someting(T obj) {
// do something generic...
}
};
Run Code Online (Sandbox Code Playgroud)
我想专门化do_something,但在其中我想调用"普通"do_something函数:
template<>
void foo<MyObj>::do_something(MyObj obj) {
// do something specific...
// and ALSO do something generic!
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在我的专用函数中引用do_something的正常版本?或者我只需要复制代码?
(我知道我可以用这样的方式重构foo,我不会遇到这个问题,但实际上我无法真正修改"真正的"foo,因为它是重度共享的代码.)