【发布时间】:2015-11-03 20:05:39
【问题描述】:
有人可以帮我分解一下吗?我知道宏,并且我对模板相当熟悉,但我不知道作者用这个表达什么。预期用途是什么,为什么要这样写?我们在这里定义什么?如何以及为什么要使用它?
#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? -
typename Derived使它看起来像一个 CRTP 在宏中捣碎。可以为RET_TYPE和...提供什么合理的参数,以及为什么在没有任何参数的情况下调用宏,我不知道。 -
@Quentin:想到了
__decltype(dllexport)。但这是一个 MSVC++ 扩展。 -
@MSalters 哦。 IIRC MSVC 还具有调用缺少参数的宏的扩展。
-
另外,我认为这是一个合理的问题。 OP 看到了代码并试图理解它。鉴于它充其量是令人费解的,我认为没有理由关闭它。
标签: c++ templates macros c++14 variadic-functions