gpt4 book ai didi

c++ - 有没有办法在宏中将 decltype 转换为字符串?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:11:12 26 4
gpt4 key购买 nike

有什么方法可以在 C++ 宏中计算 decltype 吗?我的主要动机是创建一个能够确定 this 类型并将其转换为字符串的宏。

如果不能使用decltype,在类声明中使用的宏是否有任何其他方法可以将类的类型作为字符串获取?

最佳答案

Is there any way I can evaluate decltype in a C++ macro?

不,因为宏在之前被严格评估decltype .

据我所知,没有办法将类的名称作为宏,句号。任何此类方式都必须得到编译器生成的宏的支持。

但是,您可以使用 typeid获取经过修饰的名称(严格来说,是实现定义的表示形式),然后使用特定于编译器的工具从中检索经过修饰的名称。

例如,GCC 提供了 demangling library做这个。

这是一个最小的例子 <a href="http://coliru.stacked-crooked.com/view?id=cab147eca92c2c23d0bdbb6d5000b11e-f674c1a6d04c632b71a62362c0ccfc51" rel="noreferrer noopener nofollow">online demo</a> :

#define THIS_CLASS_NAME() demangled(typeid(*this).name())

std::string demangled(char const* tname) {
std::unique_ptr<char, void(*)(void*)>
name{abi::__cxa_demangle(tname, 0, 0, nullptr), std::free};
return {name.get()};
}

用法:

namespace foo {
template <typename T>
struct bar {
bar() { std::cout << THIS_CLASS_NAME() << '\n'; }
};
}

int main() {
foo::bar<int> b;
}

产量:

foo::bar<int>

关于c++ - 有没有办法在宏中将 decltype 转换为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17524335/

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