在C++中减少模板化的类参数

Pet*_*efi 4 c++ templates

我有一个这样的课:

template <unsigned int A, unsigned int B>
class Foo { ... };
Run Code Online (Sandbox Code Playgroud)

Foo需要一个名为bar()的方法,但我需要专门化它.对于一个案例,当A == B时,我希望它做一件事,否则就是其他事情.如果不在函数中编写if语句,我可以这样做吗?喜欢:

Foo<A, A>::bar() { ... } and Foo<A, B>::bar() { ... }
Run Code Online (Sandbox Code Playgroud)

sky*_*ack 5

你可以部分专门化你的课程:

#include<cassert>

template<typename A, typename B>
struct S {
    void f(int i) { assert(i == 42); }
};

template<typename A>
struct S<A, A> {
    void f(int i) { assert(i == 0); }
};

int main() {
    S<int, double> s1;
    S<int, int> s2;
    s1.f(42);
    s2.f(0);
}
Run Code Online (Sandbox Code Playgroud)