gpt4 book ai didi

c++ - 自动生成函数头,可变参数模板

转载 作者:行者123 更新时间:2023-11-30 00:45:17 25 4
gpt4 key购买 nike

我有一个问题,我定义了一个模板类来应对不同维度的系统如下:

template <std::size_t N>
class system {

std::array<cv::Mat, N> matrices;

...

};

然后我需要根据系统的大小定义采用不同参数的不同函数。类似的东西:

template <>
template<typename T>
void system<1>::fun(T & a){ }

template <>
template<typename T>
void system<2>::fun(T & a, T & b){ }

template <>
template<typename T>
void system<3>::fun(T & a, T & b, T & c){ }

然而,尝试使用此策略时,编译器会给出以下错误:

Out-of-line definition of 'fun' does not match any declaration in 'system<3>'

此外,我希望标题函数将根据模板参数 N 自动生成。我尝试使用可变模板但没有运气。

最佳答案

我相信您还可以使用 integer_sequence 和别名模板使 foo 更通用。 (integer_sequence 是 c++14,但也存在 c++11 实现):

#include <utility>
#include <array>

template <class T, std::size_t>
using typer = T;

template <std::size_t N, class = std::make_index_sequence<N>>
struct S;

template <std::size_t N, std::size_t... Is>
struct S<N, std::index_sequence<Is...>>{

std::array<int, N> matrices;

template <class T>
void foo(typer<const T&, Is>... args) {
int dummy[] = { ((matrices[Is] = args), void(), 0)... };
static_cast<void>(dummy);
}
};

int main() {
S<3> s;
s.foo(1, 2, 3);
}

[live demo]

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

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