gpt4 book ai didi

c++ - 使用 decltype 返回元素类型的元函数

转载 作者:行者123 更新时间:2023-11-27 22:33:32 25 4
gpt4 key购买 nike

我有以下 MWE:

#include <memory>

template<typename T>
class Foo
{
public:
using message_type = T;
};

int main()
{
std::shared_ptr<Foo<int>> ptr;
decltype(ptr)::element_type::message_type number = 5;

return 0;
}

并且我希望有一种速记方式来访问变量的 message_type 类型(例如 ptr),而不必写出整个 decltype (ptr)::element_type::message_type 部分。 IE。在 message_type(ptr) 的谎言中为 decltype(ptr)::element_type::message_type 设置别名,结果相同。

我的第一个想法是

template<typename T>
using message_type = decltype(T)::element_type::message_type;

这乍一看似乎合乎逻辑,但实际上它混合了类型和变量的概念,所以它甚至无法编译。到目前为止,我唯一可行的解​​决方案是

#define MSG_TYPE(x) decltype(x)::element_type::message_type

但是我想避免使用宏。

对于当前的 C++ 元编程,这甚至可能吗?如果是这样,正确的语法是什么?

最佳答案

这个有效:

#include <memory>

template<typename T>
using message_type = typename T::element_type::message_type;

template<typename T>
class Foo
{
public:
using message_type = T;
};

int main()
{
std::shared_ptr<Foo<int>> ptr;
message_type<decltype(ptr)> number = 5;

return 0;
}

我不认为你可以做得更好,因为你不被允许使用 std::shared_ptr作为非类型模板参数,所以你必须做 message_type<decltype(ptr)> , message_type<ptr>无法实现(目前)。

关于c++ - 使用 decltype 返回元素类型的元函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57991984/

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