gpt4 book ai didi

c++ - 可变模板函数

转载 作者:太空狗 更新时间:2023-10-29 19:48:08 25 4
gpt4 key购买 nike

我希望能够将可变数量的函数指针传递给模板函数,例如foo .下面的示例显示了我到目前为止所拥有的内容,但是当我实际传递多个模板参数时它无法编译:

#include <iostream>
#include <cmath>

using FPtrType = double(*)(double);
constexpr double Identity( double x ) noexcept { return x; }

template <FPtrType Func=Identity>
constexpr double foo( double x ) noexcept( noexcept( Func(x) ) )
{
return Func(x);
}
template <FPtrType Func, typename... Funcs>
constexpr double foo( double x, Funcs... funcs )
{
x = Func(x);
return foo<Funcs...>(x, funcs...);
}

int main()
{
double x{ 0.5 };
std::cout << x << '\t' << foo(x) << std::endl; // OK
std::cout << x << '\t' << foo<std::sin>(x) << std::endl; // OK
std::cout << x << '\t' << foo<std::asin>(x) << std::endl; // OK
std::cout << x << '\t' << foo<std::sin, std::asin>(x) << std::endl; // Error!
}

我正在使用 gcc5 并且编译器喷出:

error: no matching function for call to 'foo(double&)'
std::cout << x << '\t' << foo<std::sin, std::asin>(x) << std::endl;
^
, 随后是另一条错误消息:

error: wrong number of template arguments (2, should be at least 0)
std::cout << x << '\t' << foo<std::sin, std::asin>(x) << std::endl;
^

有什么想法吗?

最佳答案

你可能是这个意思:

template <FPtrType Func, FPtrType Func2, FPtrType... Funcs>
constexpr double foo( double x )
{
x = Func(x);
return foo<Func2, Funcs...>(x);
}

DEMO

关于c++ - 可变模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32703458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com