[英]C++ template parameters
在讨论 typename 与 class 时,遇到了这篇博文 (mariusbancila.ro/blog/2021/03/15/typename-or-class)。 该帖子声称以下程序有效,但我无法确认。 这是代码
#include <iostream>
template <typename T>
struct wrapper
{
using value_type = T;
value_type value;
};
template <typename T, typename U>
struct dual_wrapper
{
using value_type1 = T;
using value_type2 = U;
value_type1 value;
value_type2 another_value;
};
template <typename T>
struct foo
{
T wrapped_value;
typename T::value_type get_wrapped_value() { return wrapped_value.value; }
};
int main() {
foo<wrapper<int>> f { {42} }; // works fine
std::cout << f.get_wrapped_value() << '\n';
foo<dual_wrapper<int,double>> f2{ {43, 15.0} }; /// <<<< HOW CAN THIS LINE WORK???
std::cout << f2.get_wrapped_value() << '\n';
}
如您所见,struct foo 尝试同时应用 wrapper 和 dual_wrapper。 dual_wrapper 在我的实验中不起作用。 我是否遗漏了什么或如何使 foo 与 wrapper 和 dual_wrapper 一起工作?
博客文章中的代码与您的不同:
auto get_wrapped_value() { return wrapped_value.value; }
你有:
typename T::value_type get_wrapped_value() { return wrapped_value.value; }
但是dual_wrapper
没有value_type
成员别名。
通过使用auto
返回类型,类型是从wrapped_value.value
推导出来的(对于foo<wrapper>
是wrapper::value_type
,对于foo<dual_wrapper>
是dual_wrapper::value_type1
)。
好吧,在第二次阅读时,我意识到博客文章以您拥有的那行开头,但在下一节中介绍了具有auto
返回类型的foo
(“作为括号,此示例中此特定问题还有另一种替代解决方案(鉴于我们函数的返回类型只需要包装的值类型)。即使用 auto 作为返回类型。”)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.