具有可变数字或参数的函数的 C++ 静态编译

标签 c++ templates

我发现自己写的代码是这样的:

template <class T>
inline bool allequal(T a,T b,T c) {return a==b&&a==c;}
template <class T>
inline bool allequal(T a,T b,T c,T d) {return a==b&&a==c&&a==d;}
template <class T>
inline bool allequal(T a,T b,T c,T d,T e) {return a==b&&a==c&&a==d&&a==e;}

我想知道是否有一种不使用 vector 或可变参数的自动化方法来执行此操作,因为在这种情况下速度很重要。

最佳答案

你可以试试这个:

#include <iostream>

template< typename T >
inline bool allequal( const T& v )
{
  return true;
}

template< typename T, typename U, typename... Ts >
inline bool allequal( const T& v, const U& v1, const Ts&... Vs)
{
  return (v == v1) && allequal( v1, Vs... );
}

int main()
{
    std::cout << std::boolalpha;
    std::cout << allequal(1, 1, 1, 1) << std::endl;
    std::cout << allequal(1, 1, 2, 2) << std::endl;
    return 0;
}

AFAIK 有一项针对 C++17 的提案,包括使用运算符对可变参数模板进行自定义扩展,这可以避免这种递归和这种丑陋的 (IMO) 终止,其中一个参数为 return true

注意:对于许多参数,这可能无法内联。

关于具有可变数字或参数的函数的 C++ 静态编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30665774/

相关文章:

如果没有 seekg 和 seekp,c++ fstream write 不适用于二进制文件

c++ - 声明函数会在代码中产生任何问题

c++ - 如何将 std::map 传递给 VS2013 中的可变参数模板?

templates - 在velocity模板中调用java方法

c++ - 在 C++ 中使用模板是什么意思

c++ - 用 C++ 编写类型类

c++ - 结构中包含数组的结构数组

c++ - 如何减少大量包装类的实现代码?

c++ - GTK3 检测用户调整窗口大小

c++ - 错误 LNK2019 : unresolved external symbol "public: __thiscall Signal