簡體   English   中英

輸入整數模板參數的推斷

[英]Type inference for integral template parameter

我創建了一個包含方法唯一標識的類型

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)

但有沒有辦法在不使用宏的情況下推斷它? 或者也許還有其他方法可以獲得一種獨特地描述方法的類型?

但有沒有辦法在不使用宏的情況下推斷它?

目前,沒有。 有一個建議在語言中添加一個構造,使非類型模板參數可以像auto一樣免除N4469

但是現在,您可以使用它來簡化身份:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM