首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++模板参数

C++模板参数
EN

Stack Overflow用户
提问于 2022-09-02 19:01:43
回答 1查看 77关注 0票数 1

在讨论typename与类的问题时,遇到了这个博客文章(mariusbancila.ro/blog/2021/03/15/typename-or-class)。这篇文章声称下面的程序起了作用,但我无法证实。这是代码

代码语言:javascript
复制
#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尝试同时应用包装器和dual_wrapper。dual_wrapper在我的实验中不起作用。我错过了什么或者如何让foo同时使用包装器和dual_wrapper吗?

EN

回答 1

Stack Overflow用户

发布于 2022-09-02 19:26:36

博客文章中的代码与您的不同:

代码语言:javascript
复制
auto get_wrapped_value() { return wrapped_value.value; }

你有:

代码语言:javascript
复制
typename T::value_type get_wrapped_value() { return wrapped_value.value; }

但是dual_wrapper没有value_type成员别名。

通过使用auto返回类型,可以从wrapped_value.value ( foo<wrapper>wrapper::value_typefoo<dual_wrapper>dual_wrapper::value_type1 )推导出该类型。

在第二次阅读时,我意识到blogpost以您的行开头,但是在下一节中介绍了fooauto返回类型(“作为括号,这个特殊问题还有另一种解决方案来自这个示例(给出的是函数的返回类型只需要包装的值类型),即返回类型使用auto )。”

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73586954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档