有什么方法可以根据类模板类型初始化此变量吗?

2023-12-14

我有课stats带有模板,这样就可以灵活使用。不过,我对模板很陌生,我认为它们的重点是使其在用户周围灵活。所以我觉得我做错了什么,因为我撞到了一堵小墙。

#include <iostream>
#include <cstdio>
#include <iomanip>

template <typename T>
class stats
{
    private:
        int n;
        T sum;
    public:
        stats()
        {
            this->n = 0;
            this->sum = T();
        }
        void push(T a);
        void print();
};

int main()
{
    std::string tmp; // change type based on class type T
    stats<std::string> s;
    while (std::cin >> tmp) // while input is active...
    {
        s.push(tmp);
    }

    // Output & Formatting
    s.print();
    return 0;
}
template <typename T>
void stats<T>::push(T a)
{
    this->sum += a;
    ++this->n;
}
template <typename T>
void stats<T>::print()
{
    std::cout   << std::left << std::setw(4) << "N"   << "= " << n   << '\n'
                << std::left << std::setw(4) << "sum" << "= " << sum << '\n';
}

From int main(),理想情况下,我希望 tmp 不必每次我想尝试不同类型时都自己更改。这在 C++ 中可能吗?


惯用的方法是公开类型别名:

template <typename T>
class stats
{
public:
    using value_type = T;

    // ...
};

然后在你的主目录中:

int main()
{
    stats<std::string> s;
    decltype(s)::value_type tmp;
    while (std::cin >> tmp)
    {
        s.push(tmp);
    }

    // ...
}

那样,tmp将始终采用以下类型T.

为了简化你的主函数,你也可以在那里使用别名:

int main()
{
    using stats_t = stats<std::string>;
    stats_t s;
    stats_t::value_type tmp;
    while (std::cin >> tmp)
    {
        s.push(tmp);
    }

    // ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有什么方法可以根据类模板类型初始化此变量吗? 的相关文章

随机推荐

  • 如何编写注释/方面以不进入方法但在给定条件为 false 时返回 null?

    我目前有一个要求 如果给定条件为 false 则需要从 100 个方法中返回 null 我正在考虑为此使用 Java Annotations 或 Spring Aspects 这样我就不必到处编写 if else 代码块 知道如何使用 Ja
  • 匹配键值模式正则表达式

    我正在制作一个键值解析器 其中输入字符串采用以下形式key value key2 value 键可以包含字符a z A Z and 0 9和值可以包含任何字符 但 and 需要以反斜杠为前缀 逗号用于分隔键值对 但在最后一对之后不需要 到目
  • 从 URL 中提取 TLD,并对每个 TLD 文件的域和子域进行排序

    我有一个包含数百万个网址的列表 我需要提取每个网址的 TLD 并为每个 TLD 创建多个文件 例如 收集所有以 com 作为 tld 的 url 并将其转储到 1 个文件中 将 edu tld 转储到另一个文件中 依此类推 此外 在每个文件
  • SignalR 无法启动连接

    我有一个 Angular 应用程序以及使用 SignalR 的 ASP NET Core 2 2 后端 启动连接时 我收到错误 Error Failed to complete negotiation with the server Err
  • 如何使用VBA获取google搜索的第一个搜索结果链接?

    在我的日常任务中 我目前必须搜索大量产品并收集有关这些产品的信息 所以我的想法是在谷歌上搜索产品 并通过从产品标题部分提取数据来从第一个搜索结果中获取信息 并对许多产品进行循环 到目前为止 我的代码如下 Sub SkuAutomation
  • 将 div 隐藏在其父项后面? [复制]

    这个问题在这里已经有答案了 div class content wrapper div class popup div class close div div div content wrapper 是相对定位的 包含所有页面内容 不仅仅是
  • grep 文件匹配特定列

    我只想保留其中的行results txt与中的 ID 匹配uniq txt基于第 3 列中的匹配results txt 通常我会使用grep f uniq txt results txt 但这并没有指定第 3 列 uniq txt 9606
  • CSS 中的 SVG DataURI 在 Firefox 中不起作用

    body background url data image svg xml utf8
  • 拉入 Mercurial 之前自动搁置(使用 TortoiseHG)?

    我不想提交一些已更改的文件 例如 web config 在拉取并更新到新的变更集之前 我必须将它们搁置起来 拉取和更新后 我必须取消搁置它们 我目前正在使用 TortoiseHG 有没有任何扩展可以自动执行此操作 我建议其他一些东西 您可以
  • 创建数组变量

    我想创建这种输出 var s1 Sony 7 Samsung 5 LG 8 这样我就可以用它来将我的图表作为变量传递 从我的ajax结果中得出 success function data code to extract the data v
  • C# 为所有可选参数提供值

    我正在读一本 C 书籍 正在阅读命名参数和可选参数一章 我读过一个项目符号 上面写着 如果存在多个可选参数并且指定了一个值 一 所有前面的可选参数也必须提供值 您能给我一个例子吗 因为我无法从代码中重现上述语句 以此方法签名为例 publi
  • 从使用 JWS 下载的 jar 文件中提取一些内容

    我试图从使用 java webstart 下载的 jar 文件中提取一些文件 下面的代码用于定位 jar 并启动文件系统 1 final ProtectionDomain domain this getClass getProtection
  • 如何在 UIView 中加载 xib 文件

    我一直在到处寻找 但到目前为止没有任何对我有用的东西 基本上我想要一个名为 rootView xib 的 xib 文件 在其中我想要一个 UIView 让我们称之为 containerView 它只占据屏幕的一半 所以会有常规视图和新视图
  • iframe 和父站点之间如何通信?

    iframe 中的网站不在同一个域中 但两者都是我的 我想在iframe和父站点 是否可以 对于不同的域 无法直接调用方法或访问 iframe 的内容文档 你必须使用跨文档消息传递 父级 gt iframe 例如在顶部窗口中 myIfram
  • Laravel 集团按月记录和总价

    您好 我正在尝试按月份对记录进行分组并对订单中的价格进行求和 我尝试过这样的事情 order Order select DB raw sum price as sums gt groupBy function date return Car
  • 带有 Tomcat 9 的 jakarta.servlet - 未找到问题 [重复]

    这个问题在这里已经有答案了 我有一个使用 eclipse 和 tomcat 9 服务器运行的应用程序 当我运行应用程序时 它会在浏览器中打开 index html 页面 但在索引页面内调用的 API 会出现 404 状态错误 我尝试了各种
  • 通过鼠标点击删除节点,networkX,python 2.7

    我用Python 2 7用networkX编写了一个程序 它绘制了一棵带有黑白节点的树 这是一个最小的例子 import networkx as nx import matplotlib pyplot as plt import numpy
  • 如何立即调用 C++ lambda?

    我继承的类的构造函数需要传入一个重要的对象 与此类似 MyFoo MyFoo SomeBase complexstuff return The complexstuff没有什么关系MyFoo 所以我不想将其传递进去 而不是编写某种返回的一次
  • 更改 HTML 文本框:覆盖而不是插入为用户类型

    我正在开发一项允许编辑文本的服务 为了在此过程中帮助用户 我想允许用户将文本字段设置为覆盖模式 就像在 Word 等中一样 如何将 HTML 文本框的行为更改为覆盖而不是插入文本当用户输入时 例如 如果文本框包含以下文本 This is a
  • 有什么方法可以根据类模板类型初始化此变量吗?

    我有课stats带有模板 这样就可以灵活使用 不过 我对模板很陌生 我认为它们的重点是使其在用户周围灵活 所以我觉得我做错了什么 因为我撞到了一堵小墙 include