gpt4 book ai didi

c++ - 模板定义的宏

转载 作者:太空狗 更新时间:2023-10-29 21:11:04 25 4
gpt4 key购买 nike

我对别名模板有疑问,因为我有一个代码必须与不支持别名模板的 VS 2012 兼容。

假设我有一个像这样的别名模板:

template<typename A, typename B> using foo = bar<A,B>;

那么能够做这样的事情会很方便:

#ifdef NO_ALIAS_TEMPLATE_AVAILABLE
#define foo<x,y> bar<x,y>
#else
template<typename A, typename B> using foo = bar<A,B>;
#endif

不过我能做的最好的就是

    #define foo(x,y) bar<x,y>

为了代码的可读性,我不想用圆括号替换我所有代码中的所有模板特化。

有没有办法让宏带有分隔符 <>为了它的论点?或者我的问题没有简单的解决方案?如果不是,如何实现对别名模板的严格等价?

最佳答案

不,预处理器不能使用<>分隔宏参数。

您可以使用类模板模拟别名模板:

template <typename A, typename B>
struct foo {
typedef bar<A, B> type;
};

// Usage: foo<A, B>::type
// Generic context: typename foo<A, B>::type

Demo

这会使它的使用变得不那么友好,但这是不可避免的。

关于c++ - 模板定义的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51752643/

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