【发布时间】:2018-05-22 20:06:39
【问题描述】:
我从一些 SFINAE 开始,但我无法完全掌握一些我想使用它的情况。
例如,如果我有一个基于模板的类,它应该根据模板参数具有不同的函数实现,即
template <typename T>
class cExampleClass
{
/// Function enabled when "cExampleClass::member" exists
auto overloadedFunction() -> decltype((std::declval<t>().member()),T::some_dependant_type())
{
// Do some stuff and use cExampleClass::member
}
/// Function enabled when "cExampleClass::member" does not exist
auto overloadedFunction() -> T::some_dependant_type()
{
// Do some different stuff
}
};
最好将函数调用为
object.overloadedFunction();
我的编译器抛出
错误:‘class cARD’没有名为‘member’的成员
在 decltype 行上(即使未定义回退函数)。这似乎与here 的答案相矛盾,那么定义尾随返回类型的正确方法是什么?
此外,该函数显然不能重载。有没有简单的方法来定义一个回退函数?
【问题讨论】: