如何在C ++中的main函数中使用模板数据类型?

时间:2016-03-10 22:28:27

标签: c++ templates typing

#include <iostream>

using namespace std;

template <class U>
U add (U a, U b)
{
    U c = 0 ;
    c = a + b;
    return c;
}

int main()
{
    int first = 2;
    int second = 2;

    U result = 0;

    result = add(first, second);

    cout <<  result << endl;

    return 0;
}

我想使用模板数据类型声明结果变量的数据类型,这样我的添加程序是通用的,但编译器给我这个错误&#34;结果未在此范围内声明。&#34;

2 个答案:

答案 0 :(得分:5)

你想做的事是不可能的。您只能在添加功能中使用U.

但是,你可以这样做

auto result = add(first, second);

decltype(auto) result = add(first, second);

在你的情况下,两者都会这样做。但是,它们完全不同。为简短起见,decltype(auto)将始终为您提供add返回的确切类型,而auto可能不会。

快速举例:

const int& test()
{
    static int c = 0;
    return c;
}

// result type: int
auto result = test();

// result type: const int&
decltype(auto) result = test();

如果您想了解更多有关汽车的知识,Scott Meyers将其完美地解释:

wxMkdir and wxMkDir

答案 1 :(得分:0)

José优秀提案的另一种选择,即允许您拆分声明和“初始化”(这将只是一个作业,如您的问题),是:

decltype(add(first, second)) result = 0;
result = add(first, second);

但是,显然,你好。