【问题标题】:Unable to assign shorter names to C++ function templates [duplicate]无法为 C++ 函数模板分配较短的名称 [重复]
【发布时间】:2016-04-23 17:07:26
【问题描述】:

为了提高代码的可读性,我尝试为函数模板分配较短的名称,如下例所示:

#include <iostream>

template<typename T>
T func(T a, T b)
{
    return a + b;
}

int main() 
{
    using fi = func<int>;
    using fd = func<double>;

    std::cout << fi(1, 1) << std::endl;
    std::cout << fd(1.0, 1.0) << std::endl;

    return 0;
}

但是在尝试编译时,我得到一个错误

$ g++ func.cpp -o func
func.cpp: In function ‘int main()’:
func.cpp:11:11: error: expected nested-name-specifier before ‘fi’
     using fi = func<int>;
           ^

在不必依赖预处理器定义的情况下,为函数模板分配较短名称的公认方法是什么?

【问题讨论】:

    标签: c++ function templates using


    【解决方案1】:

    Using 引入了一个类型。函数模板及其实例不是类型。

    auto 替换 using 将使您的代码编译并执行您可能想要的操作。许多 cpmpiler 擅长内联简单的函数指针案例,因此在 prod 中它可能对性能的影响为零。

    【讨论】:

    • typedef怎么样?
    • @ThomasMatthews:typedef,顾名思义,也引入了一个type
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多