gpt4 book ai didi

c++ - 获取包含类的类型

转载 作者:太空狗 更新时间:2023-10-29 23:06:44 27 4
gpt4 key购买 nike

我希望有一个宏,它使用它所使用的类的类型,而不将该名称传递给宏。为此,我尝试了 typedef decltype(*this) my_type;,但 this 只能在非静态成员函数中使用。有什么想法吗?

编辑(评论拷贝):

我制作了一个基类和一组宏,它们使用 CRTP 无缝地实现类数据的三重缓冲。当一个三重缓冲类继承自另一个三重缓冲类时,复杂性就来了,实际上有两个基——隐藏在宏中的 CRTP 基和显式基。因为显式基也继承自 CRTP 基的不同实例化,派生类中的成员函数在两个基之间发生冲突。我正在编写一个宏,通过在派生类中重新实现函数来自动解决此冲突。此重新实现需要派生类的类型来访问 CRTP 类的正确实例化,因此是原始问题。

最佳答案

警告:以下内容符合标准。它只有在我将 -fpermissive 传递给 GCC 时才有效,并且在编译时会打印出丑陋的警告:

#include <type_traits>

#define JOIN( A, B ) JOIN_INTERNAL( A, B )
#define JOIN_INTERNAL( A, B ) A##B
#define UNIQUE_NAME JOIN( unique_prefix_to_typedef_this_, __LINE__ )

template< typename T > struct class_type;
template< typename T, typename C > struct class_type< T C::* > { typedef C type; };

#define TYPEDEF_THIS void UNIQUE_NAME(); typedef class_type< decltype( &UNIQUE_NAME ) >::type

struct A
{
TYPEDEF_THIS my_type;
static_assert( std::is_same< my_type, A >::value, "my_type is not A if this fails" );
};

int main()
{
}

我希望你能使用它,否则我很确定没有符合标准的解决方案。

关于c++ - 获取包含类的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14789333/

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