元函数使用 decltype 返回元素类型
Metafunction returning element type using decltype
我有以下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
部分。 即有一些别名可以沿着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>
(还(不可能实现。
相关文章:
- lower_bound()返回最后一个元素
- 如何实现 Front() 方法以返回模板化双向链表C++的第一个元素?
- 这个返回元素位置的基于循环的函数有什么问题?
- 为什么这个程序没有打印返回的迭代器的正确第二个元素?
- 反转后不返回最后一个元素
- 保持排序的数据结构,允许log N插入时间,并且可以返回我在log N中查找的元素的索引
- 为什么 min_element() 返回最小元素的索引,而不是迭代器?
- 第 i 个元素返回 i 的函数数组
- 将新元素添加到列表中,并返回对该元素的引用?
- C++ 将向量中出现 n 次的所有元素作为向量返回
- 为什么将函数的返回类型从结构节点*更改为void后,链表的元素没有显示create_ll和显示?
- 元函数使用 decltype 返回元素类型
- Rcpp::Vector <RTYPE>的类返回元素的模板
- 为什么指向 c 字符串中元素的指针不只返回元素?
- 迭代器:如果 '*' 返回元素的引用,为什么删除 *(myList.end()) 会给出 SegFault
- 不确定为什么这不返回元素的索引?
- 在向量中的索引处返回元素
- 返回元素的速度比通过引用和修改发送元素的速度慢
- 函数采用向量、索引和返回元素
- c++返回元素在没有代码的行上给出访问冲突