gpt4 book ai didi

c++ - 在#define 中给定文本,它能以某种方式传递给模板吗?

转载 作者:行者123 更新时间:2023-11-30 02:12:56 25 4
gpt4 key购买 nike

假设我有一个宏 FOO(name) 和一些采用一个参数的模板类 Bar<>(问题是什么类型的参数)。每次我用不同的名称调用 FOO 时,我都想获得 Bar 的不同实例化。 Bar<> 模板实际上不需要能够在内部获取名称,我只需要确保不同的名称创建 Bar<> 的不同实例并且始终使用相同的名称(即使在不同的翻译单元中)获取 Bar<> 的同一实例。所以这是一个粗略的第一次尝试:

template<const char* x>
class Bar
{
//... stuff
};

#define FOO(name) Bar<#name>

这会起作用,除了 char 文字不能作为模板参数传递,因为它们没有外部链接。如果预处理器中有某种​​方法可以获取一致的“名称”哈希值,那么可以使用一个 int(然后可以将其传递给模板),但我看不出有任何方法可以做到这一点。

想法?

最佳答案

根据您打算在哪里使用此宏( namespace 或类范围都可以),您可以创建一个标记类型并使用它:

template<typename T>
class Bar
{
//... stuff
};

#define FOO(name) struct some_dummy_tag_for_##name {}; Bar<some_dummy_tag_for_##name>

如果这不起作用,也许您可​​以事先“声明”这些名称:

#define DECLARE_FOO(name) struct some_dummy_tag_for_##name {}
#define FOO(name) Bar<some_dummy_tag_for_##name>

// something.h
DECLARE_FOO(foobar);

// something.cpp
FOO(foobar);

关于c++ - 在#define 中给定文本,它能以某种方式传递给模板吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1257493/

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