作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
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/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
正如您在 this travis.yml 中看到的那样文件,我的代码依赖于一些第三方库,我在构建项目之前将它们安装在远程系统上。 Travis 每次推送提交时都会下载并构建这些库,这可以避免吗?我的意
我是一名优秀的程序员,十分优秀!