我需要对 struct
进行部分特化,但我也想使用一些通用功能。例如,假设我有以下类型:
template <typename A, typename B>
struct Foo
{
Foo& func0() { /* common actions with A and B */; return *this; }
void func1() { /* common actions with A and B */ }
void func2() { /* common actions with A and B */ }
}
接下来,我想将其专门针对其中一个模板参数进行特殊处理 - 例如,当B
为int
时,我想保留func0
和func1
的行为与普通Foo
完全相同(当然,func0()
必须返回我的专门针对int
的Foo&
),func2
我想要重写(假设我有更有效率的整数实现),并且我还想为我的专门Foo
添加func3()
。
当然,我可以简单地编写以下内容:
template <typename A>
struct Foo<A, int>
{
Foo& func0() { /* common actions with A and B */; return *this; }
void func1() { /* common actions with A and B */ }
void func2() { /* actions with A and 'int' */ }
void func3() { /* actions with A and 'int' */ }
}
但我希望在func0
和func1
中避免复制粘贴。
我还可以将通用的Foo
重命名为FooBase
,然后从中简单地继承Foo
,但在这种情况下,我不能将通用情况用作
Foo<float, float> a;
存在哪些方法可以让我同时使用两者?
Foo<float, float> a;
并且
Foo<float, int> b;
如何在不复制粘贴常见的 Foo
代码到特化中实现?
我对C++11和早期标准的兼容性都很感兴趣。