输入整数模板参数的推断

时间:2016-04-10 17:20:07

标签: c++ c++11 c++14

我创建了一个包含方法唯一标识的类型

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)

但有没有办法在不使用宏的情况下推断它?或者也许还有其他方法可以获得一种独特地描述方法的类型?

1 个答案:

答案 0 :(得分:4)

  

但是有没有办法在不使用宏的情况下推断它?

此刻,没有。我们建议在语言中添加一个构造,使非类型模板参数可以免除autoN4469

但是现在,你可以用它来简化身份:

template<typename T, T t>
using identity = std::integral_constant<T, t>;