gpt4 book ai didi

c++ - 如何将多参数模板传递给宏?

转载 作者:IT老高 更新时间:2023-10-28 23:09:43 25 4
gpt4 key购买 nike

假设我有一个这样的宏:

#define SET_TYPE_NAME(TYPE, NAME) \
template<typename T> \
std::string name(); \
\
template<> \
std::string name<TYPE>() { \
return NAME; \
}

如果我向它传递一个具有多个参数的模板,这将不起作用,因为 <int, int> 中的逗号被解释为分隔 macro 参数,而不是模板参数。

SET_TYPE_NAME(std::map<int, int>, "TheMap")
// Error: macro expects two arguments, three given

这个问题似乎可以通过这样做来解决:

SET_TYPE_NAME((std::map<int, int>), "TheMap")

但是现在又出现了一个问题,我真的没想到:

 template<>
std::string name<(std::map<int, int>)>()
// template argument 1 is invalid

似乎多余的括号使模板参数无效。有没有办法解决这个问题?

最佳答案

除了typedef,你可以切换参数的顺序和使用可变参数宏(需要C99或C++11兼容的编译器):

#define SET_TYPE_NAME(NAME, ...) \
template<typename T> \
std::string name(); \
\
template<> \
std::string name<__VA_ARGS__>() { \
return NAME; \
}

...

SET_TYPE_NAME("TheMap", std::map<int, int>)

关于c++ - 如何将多参数模板传递给宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8942912/

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