gpt4 book ai didi

c++ - 类成员重载方法的 SFINAE

转载 作者:行者123 更新时间:2023-11-30 01:49:53 24 4
gpt4 key购买 nike

考虑这个片段:

#include <type_traits>

struct UseMap;
struct NoMap;

template<typename MapType = NoMap>
class MyClass
{
public:

typename std::enable_if<std::is_same<MapType, NoMap>::value, bool>::type
handleEvent(int someVal)
{
return doSomething();
}

typename std::enable_if<std::is_same<MapType, UseMap>::value, bool>::type
handleEvent(int someVal)
{
return doSomethingDifferent();
}

bool doSomething() {};
bool doSomethingDifferent() {};
};

int main() {
MyClass obj1();
MyClass<UseMap> obj2();
return 0;
}

是否可以根据提供的模板类类型只编译一个handleEvent 方法?对于上面的例子,编译器给出:

prog.cpp:18:3: error: 'typename std::enable_if<std::is_same<MapType, UseMap>::value, bool>::type MyClass<MapType>::handleEvent(int)' cannot be overloaded

最佳答案

我认为你必须制作重载函数模板。

template<typename T = MapType,
typename std::enable_if<
std::is_same<T, NoMap>::value>::type *& = nullptr>
bool
handleEvent(int someVal)
{
return doSomething();
}

template<typename T = MapType,
typename std::enable_if<
std::is_same<T, UseMap>::value>::type *& = nullptr>
bool
handleEvent(int someVal)
{
return doSomethingDifferent();
}

这通过了编译。 (带有 -std=c++11 的 clang-600.0.54)

关于c++ - 类成员重载方法的 SFINAE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28321476/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com