gpt4 book ai didi

c++ - 部分模板特化问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:59:00 26 4
gpt4 key购买 nike

class FooInterface {
virtual void toggle() = 0;
};

template <class TYPE, class CONFIG>
class Foo : public FooInterface {
virtual void toggle();

TYPE value_;
};

template <>
void Foo<bool, class CONFIG>::toggle() {
if (CONFIG::canToggle())
value_ = !value_;
}

struct MyConfig {
static bool canToggle() {
return false;
}
};

int main() {
Foo<bool, MyConfig> foo;
}

这是对我正在处理的内容的准确近似。我基本上想要一个专门的方法来处理 TYPE,同时保持 CONFIG 通用。因此,举例来说,我可能有十几种不同的 Foo::toggle() 方法,它们具有专门的代码来处理特定的 TYPE,但是 CONFIG 使用的是什么> 将在所有这些方法中保持一致。

问题是以前的代码无法编译,还有几种不同的组合,我很感激能帮助您找到不同的解决方案或一些变通方法来使当前的代码正常工作。

编辑:我应该注意到前面的代码在没有 CONFIG 模板参数的情况下也能工作。

最佳答案

您需要对整个类(class)进行部分特化。您不能专门化单个成员函数。

template <class CONFIG>
class Foo<bool, CONFIG> : public FooInterface
{
virtual void toggle();
bool value_;
};

template <class CONFIG>
inline void Foo<bool, CONFIG>::toggle()
{
if (CONFIG::canToggle())
value_ = !value_;
}

关于c++ - 部分模板特化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5317971/

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