는 내가 처리 파이프 라인 구현이,하지만 난 이런 식으로 개선하고 싶습니다 :가변 인수 템플릿 인수가있는이 생성자가 일치하지 않는 이유는 무엇입니까?
sda_variadic.cpp: In function 'int main()':
sda_variadic.cpp:40:39: error: no matching function for call to 'pipeline<f1, f2>::pipeline(src&, b1&, snk&)'
sda_variadic.cpp:40:39: note: candidates are:
sda_variadic.cpp:26:5: note: template<class ... Buffs, class Bin, class Bout> pipeline<T1, T ...>::pipeline(Buffs& ..., Bin&, Bout&)
sda_variadic.cpp:23:8: note: constexpr pipeline<f1, f2>::pipeline(const pipeline<f1, f2>&)
sda_variadic.cpp:23:8: note: candidate expects 1 argument, 3 provided
sda_variadic.cpp:23:8: note: constexpr pipeline<f1, f2>::pipeline(pipeline<f1, f2>&&)
sda_variadic.cpp:23:8: note: candidate expects 1 argument, 3 provided
이 오류의 원인은 무엇인가 :
#include <iostream>
// buffers
struct src{}; struct b1{}; struct snk{};
// filters
struct f1
{
f1(const src &, b1 &) { std::cout << "f1(src, b1)" << std::endl; }
};
struct f2
{
f2(const b1 &, snk &) { std::cout << "f2(b1, snk)" << std::endl; }
};
// the pipeline
template< typename... Filters >
struct pipeline
{
template< typename LastB >
pipeline(const LastB &)
{}
};
template < typename T1, typename... T >
struct pipeline< T1, T... > : pipeline<T...>
{
template< typename... Buffs, typename Bin, typename Bout >
pipeline(Buffs &... buffs, Bin & bin, Bout & bout) :
pipeline<T...>(buffs..., bin),
filter(bin, bout)
{
}
T1 filter;
};
int main()
{
src ba; b1 bb; snk bc;
pipeline<f1> p1(ba, bb);
pipeline< f1, f2 > p2(ba, bb, bc); // the problem is in this line!
}
불행하게도, 위의 예는 다음 오류를 생산?
해결 방법?
작은 설명. 위의 예에서는 먼저 특수화되지 않은 pipeline<>(snk)
의 개체를 만든 다음 특수화 된 개체 pipeline<f1>(b1,snk)
을 만든 다음 특수화 된 개체 pipeline< f1, f2 >(src,b1,snk)
을 만듭니다.
btw 위 예제는 1 개의 필터 (pipeline< f1
)에 적용됩니다. 함수 파라미터 팩 (Buffs
)가 최종 위치에 아니므