题
我试图写一个C ++宏,将采取两种type
或type name
作为输入,并给出type
的输出。
例如:
REMOVE_NAME(int)
应为int
REMOVE_NAME(int aNumber)
也应int
我设法写这样一个宏(下图)和它的作品,但我不知道是否我缺少一个简单的方法来做到这一点。
#include <boost/type_traits.hpp>
template <typename T>
struct RemoveNameVoidHelper
{
typedef typename T::arg1_type type;
};
template <>
struct RemoveNameVoidHelper<boost::function_traits<void()>>
{
typedef void type;
};
#define REMOVE_NAME(expr) RemoveNameVoidHelper<boost::function_traits<void(expr)>>::type
有任何想法吗?
动机
我使用这个宏代码生成提供帮助。 我有一个用于声明类定义中的某些方法的另一个宏:
#define SLOT(name, type) \
void Slot##name(REMOVE_NAME(type) argument) \
{ \
/* Something that uses the argument. */ \
} \
void name(type)
我想要的用户SLOT
宏能够舒适地选择他是否要实施他的插槽内或类外,就像正常的方法。 这意味着, SLOT
的类型参数可以是一个类型,或具有名称的类型。 例如:
class SomeClass
{
SLOT(ImplementedElsewhere, int);
SLOT(ImplementedHere, int aNumber)
{
/* Something that uses aNumber. */
}
};
如果没有REMOVE_NAME
宏,我的自动生成的Slot...
方法就不能为它的参数指定了自己的名字,因此将无法参考。
当然,这不是这个宏的唯一可能使用。