我希望有一个宏,它使用它所使用的类的类型,而不将该名称传递给宏。为此我尝试过typedef decltype(*this) my_type;,但是this只能在非静态成员函数中使用。有任何想法吗?
编辑(评论副本):
我创建了一个基类和一组宏,可以使用 CRTP 无缝地实现类数据的三重缓冲。当一个三重缓冲类继承另一个三重缓冲类时,情况就变得复杂起来,实际上有两个基类 - 隐藏在宏中的 CRTP 基类和显式基类。由于显式基类也继承自 CRTP 基类的不同实例,因此派生类中的成员函数在两个基类之间会发生冲突。我正在编写一个宏,通过重新实现派生类中的函数来自动解决此冲突。此重新实现需要派生类的类型才能访问 CRTP 类的正确实例化,因此出现了最初的问题。
警告:以下内容不符合标准。它只有在我传递给 GCC 时才有效-fpermissive,并且在编译时会打印出丑陋的警告:
#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()
{
}
Run Code Online (Sandbox Code Playgroud)
我希望你能使用它,否则我很确定没有标准的符合解决方案。
| 归档时间: |
|
| 查看次数: |
324 次 |
| 最近记录: |