模板部分专业化
Template partial specialization on bool
这是我认为的一个非常基本的问题,但是即使在stackoverflow上,我也找不到答案。很抱歉,如果您想在阅读时打我。
我只想对布尔值进行部分专业化:
template < typename Object, bool Shared = false >
class Foo {
void bar();
};
template < typename Object >
void Foo<Object, true>::bar() {}
template < typename Object >
void Foo<Object, false>::bar() {}
int main() {
Foo<int> test;
return 0;
}
我认为这个想法是正确的,但是我缺少此代码(可能真的很愚蠢):
Test3.cpp:8:30: error: invalid use of incomplete type ‘class Foo<Object, true>’
void Foo<Object, true>::bar() {
^
Test3.cpp:2:7: note: declaration of ‘class Foo<Object, true>’
class Foo {
^~~
Test3.cpp:13:31: error: invalid use of incomplete type ‘class Foo<Object, false>’
void Foo<Object, false>::bar() {
^
Test3.cpp:2:7: note: declaration of ‘class Foo<Object, false>’
class Foo {
您的模板定义了类,而不是函数。这意味着您必须专注于该类,而不是类方法:
template < typename Object >
class Foo<Object, false> {
void bar();
};
template < typename Object >
class Foo<Object, true> {
void bar();
};
另一种方法是分解foo并在单独的助手类中处理bar的实现。这减少了实施Foo所需的重复量。
例如:
template<class Object, bool Shared>
struct implement_bar;
template<class Object>
struct implement_bar<Object, true>
{
void operator()(Object& o) const
{
// do true thing with o
}
};
template<class Object>
struct implement_bar<Object, false>
{
void operator()(Object& o) const
{
// do false thing with o
}
};
template < typename Object, bool Shared = false >
class Foo {
void bar()
{
return implement_bar<Object, Shared>()(*this);
}
};
int main() {
Foo<int> test;
return 0;
}
相关文章:
- 如何使用默认参数等选择模板专业化
- 模板化建造师专业化
- 类模板的成员功能的定义在单独的TU中完全专业化
- 如何用RISC-V GD32VF103CBT6开发板卸载精确的ADC过采样
- 如何将部分流作为参数传递
- 部分专业化和嵌套模板
- 模板专业化可以进入我的.cpp吗?
- 我是 c++ 的新手.学习基本知识后,我想做井字游戏.对于印刷板,我在下面写代码,但它显示错误
- 别名模板的专业化 C++11 中没有开销的最佳替代方案
- HDF5Cpp 扩展复合数据集超板问题
- 部分专业化和对标准::void_t<>的需求
- "专业化不参与超载"
- 特定好友功能专业化
- 是否可以混合使用SFINAE和模板专业化?
- 有没有办法修改'operator->',以便'z->im'返回复数的虚部
- C++剪贴板队列粘贴随机结果?
- 将缓冲区复制到剪贴板 [换行错误]
- 为什么在班级专业化上会出现错误?
- enable_if如何帮助选择类模板的专业化?
- 如何在部分类模板专业化中实现继承