【发布时间】:2016-04-11 07:15:20
【问题描述】:
我创建了一个拥有方法唯一标识的类型
template <typename Method, Method method>
struct identity {
};
所以我可以以独特的方式描述方法,即使它们具有相同的签名
struct Class {
void foo() {}
void bar() {}
};
typedef identity<decltype(&Class::foo), &Class::foo> foo_identity;
typedef identity<decltype(&Class::bar), &Class::bar> bar_identity;
std::cout << std::boolalpha << std::is_same<foo_identity, bar_identity>::value << std::end;
// prints "false"
由于实例化的方法过于冗长,因为两个名称都被使用了两次,所以可以将其缩短为:
#define GEN_IDENTITY(NAME) identity<decltype(&NAME), &NAME>
GEN_IDENTITY(Class::foo)
但是有没有办法在不使用宏的情况下推断它?或者也许还有其他方法可以得到一个可以明确描述方法的类型?
【问题讨论】: