gpt4 book ai didi

c++ - 整数模板参数的类型推断

转载 作者:太空狗 更新时间:2023-10-29 20:55:10 24 4
gpt4 key购买 nike

我创建了一个类型,它拥有一个方法的唯一标识

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)

但是有没有一种不用宏就可以推导出来的方法呢?或者也许有其他方法可以获取明确描述方法的类型?

最佳答案

But is there a way to deduce it without the use of a macro?

目前,没有。有人提议在语言中添加一个结构,使非类型模板参数可扣除,就像 auto ( N4469 )

但是现在,您可以用它来简化标识:

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

关于c++ - 整数模板参数的类型推断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36532968/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com