클래스가 있으므로 가변 인수 템플릿 인수로 Sample
이라고합시다. 이 클래스에는 run(Args... args)
함수가 포함되어 있습니다. 이 클래스는 또한이 함수를 호출하는 스트림 연산자를 구현합니다.스트림 연산자에 여러 인수 전달
클래스는 다음과 같습니다 : 내가 아는
void main()
{
Sample<int, string, int> s;
// doesn't work :(
s << {1, "msg", 2} << {1, "msg", 2};
}
:
template<typename ...Args>
class Sample
{
void run(Args... args)
{
// do something
}
Sample& operator<<(const tuple<Args...>& args)
{
run(unpack_somehow(args)...);
return *this;
}
};
가 지금은 튜플의 중괄호 초기화를 통해 인수를 전달하여, 다수의 호출을 CONCAT하는 스트림 연산자를 사용하려면 나는 단지 make_tuple(1, "msg", 2)
을 쓸 수 있으며 작동 할 것이지만, make_tuple
과 같은 추가 함수 호출을 필요로하지 않는 솔루션을 찾고 있습니다.
인수를 중괄호로 전달할 수있는 기능을 구현할 수 있습니까 (또는 쉼표 분리 연산자로 쉼표 연산자를 오버로드 할 수 있습니까?)?
중괄호 초기화 목록은 표현식이 아닙니다. . '<<'연산자가 그 지점들 중 하나가 아니기 때문에 문법에 몇 가지 특정 지점이 나타납니다 (예 : 함수 호출의 인수로, return 문에서). 표시하는 구문은 C++이 아니므로 작동하지 않을 수 있습니다. –
@IgorTandetnik -이 경우 귀찮은 것은 결국 * 함수 호출이라는 것입니다. – StoryTeller
's.run (1, "msg", 2) .run (1, "msg", 2); 그냥'run'이'this'에 대한 참조를 리턴하도록하십시오. 구체적으로 operator <<가되어야합니까? –