这个C模板宏是什么意思?
发布时间:2020-12-16 05:31:41 所属栏目:百科 来源:网络整理
导读:有人可以帮我解决这个问题吗?我知道宏,我对模板非常熟悉,但我不知道作者用这个表达了什么.什么是预期用途,为什么这样写?我们在这里定义的是什么?如何以及为何使用此功能? #define MY_CLASS(RET_TYPE,... ) templatetypename Derived __VA_ARGS__ RET_
有人可以帮我解决这个问题吗?我知道宏,我对模板非常熟悉,但我不知道作者用这个表达了什么.什么是预期用途,为什么这样写?我们在这里定义的是什么?如何以及为何使用此功能?
#define MY_CLASS(RET_TYPE,... ) template<typename Derived> __VA_ARGS__ RET_TYPE my_class_impl<Derived> 我也有类似的东西 MY_CLASS( )::my_class_impl( int arg_id ) 我也看到了 template<typename Derived> class my_class_impl 我从一位同事那里听说这是CRTP的案例(好奇地反复出现模板模式),但他没有更具体的见解. 另外,我看到它随后如下使用: MY_CLASS(some_type)::find_desired_val(int x) { // some code } 那么,在实际实现它们时,宏用于替换类my_class_impl的方法签名? 解决方法
它用于定义my_class_impl< Derived>的成员函数.
MY_CLASS(void)::member(Bar b) {} 扩展到: template <typename Derived> void my_class_impl<Derived>::member(Bar b) {} 可变参数宏参数可用于各种(标准或非标准)属性,例如 MY_CLASS(void,__declspec(dllexport))::foo(); 扩展到: template <typename Derived> __declspec(dllexport) void my_class_impl<Derived>::foo() {} MY_CLASS():: my_class_impl(int arg_id),感谢编译器扩展允许缺少宏参数(存在于MSVC上,以及Clang和GCC,我错了),扩展为构造函数: template <typename Derived> /* nothing */ my_class_impl<Derived>::my_class_impl(int arg_id) {} 这也是一个非常丑陋的宏.它不仅难以理解,它隐藏了非常平凡的东西,并且如果您尝试返回包含逗号的类型(std :: map< int,int>)则会中断. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |