gpt4 book ai didi

c++ - 名称和派生名称类之间的连接(作为模板参数)

转载 作者:行者123 更新时间:2023-11-30 03:35:45 24 4
gpt4 key购买 nike

我试图避免此解决方案出现问题:

static const int  FOO_Test = 7;

template < typename Derived >
class Foo {

public:
static const int Type;
};

const int Foo::Type = FOO_##Derived ;

class Test : public Foo<Test> {};

如您所见,我正在尝试获取 FOO_Test 值,该值仅在有人从 Foo 生成派生类时才存在(需要一些外部工具来编写 header )。

好吧,宏连接不起作用(毕竟不确定),有实现它的想法吗?

最佳答案

从 C++14 开始,您可以使用变量模板来做到这一点。
它遵循一个最小的工作示例:

class Test;

template<typename> static constexpr int FOO;
template<> constexpr int FOO<Test> = 7;

template <typename Derived>
struct Foo {
static const int Type;
};

template<typename Derived>
const int Foo<Derived>::Type = FOO<Derived> ;

class Test : public Foo<Test> {};

int main () {
static_assert(Test::Type == 7, "!");
}

它有助于将 FOO 值与 Foo 类分开。
否则,您可以使用完全特化并丢弃这些变量。
例如:

class Test;

template <typename Derived>
struct Foo {
static const int Type;
};

template<>
const int Foo<Test>::Type = 7 ;

class Test : public Foo<Test> {};

int main () {
static_assert(Test::Type == 7, "!");
}

关于c++ - 名称和派生名称类之间的连接(作为模板参数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41013123/

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