gpt4 book ai didi

基于编译时值的c++模板特化

转载 作者:可可西里 更新时间:2023-11-01 15:09:16 25 4
gpt4 key购买 nike

我正在摸索进入模板元编程,慢慢地,我不确定如何实现以下内容:

// hpp file
enum MyEnum { Alive = 0, Dead };
class A {
public:
template<typename T, typename O, MyEnum ls>
static int Register();
};

// elsewhere in the code...
A::Register<IType1, Type1, Dead>();

在编译时我会知道第三个模板类型的枚举值是什么(编译时不变),Dead 或 Alive。是否可以为 Register 函数定义两个主体,例如:

// desired hpp file
template<typename T, typename O, Alive>
int Register();

template<typename T, typename O, Dead>
int Register();

// corresponding desired .inc file
template<typename T, typename O, Alive>
int Register() { // Alive specific implementation ... }

template<typename T, typename O, Dead>
int Register() { // Dead specific implementation ... }

我看过: C++ Template Specialization with Constant Value

但我还没有弄清楚如何让它适用于这种情况。

最佳答案

模板函数不能部分特化。解决方案是将其包装在一个结构中:

template<typename T, typename O, MyEnum ls>
struct foo;

template<typename T, typename O>
struct foo <T, O, Alive> {
static int Register() {
// ...
}
};

template<typename T, typename O>
struct foo <T, O, Dead> {
static int Register() {
// ...
}
};

template<typename T, typename O, MyEnum ls>
int Register() {
return foo<T, O, ls>::Register();
}

关于基于编译时值的c++模板特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10694943/

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