나는 다음과 같은 코드 조각이 : 방법과 다형성 클래스가 print
라는 컴파일 시간을 정의호기심 반복 템플릿 패턴
#include <iostream>
template <typename Derived>
struct Base {
void print() const { static_cast<const Derived*>(this)->print(); }
};
struct Value : public Base<Value> {
int i;
void print() const { std::cout << "Value: " << i << std::endl; }
Value(int j) : i(j) {}
};
void do_variadic_thing() {}
template <typename Derived, typename... Args>
void do_variadic_thing(const Base<Derived>& b, Args... args) {
std::cout << "Inside do_variadic_thing" << std::endl;
b.print();
do_variadic_thing(args...);
}
template <typename Derived>
void do_thing(const Base<Derived>& b) {
std::cout << "Inside do_thing" << std::endl;
b.print();
do_variadic_thing(b, b, b);
}
int main(int argc, char** argv) {
do_thing(Value(1));
}
이 코드가 사용하는 호기심 반복 템플릿 패턴.
가변 수의 인수 (do_variadic_thing
)가있는 함수에서 print
메서드를 실행하면됩니다. 코드는 컴파일 위에 제공하지만, 이상한 출력이 생성
Inside do_thing
Value: 1
Inside do_variadic_thing
Value: 1
Inside do_variadic_thing
Value: 4206337
Inside do_variadic_thing
Value: 4206337
값이 do_variadic_thing
내에서 두 번째 재귀 호출 후 변경 내용을 인쇄 왜 이해가 안가. 인수 b
은 3 번 복제됩니다. 그 유형도 동일합니다 (예 : Base<Value>
). 두 번째 호출 후에 인수가 더 이상 유효한 메모리를 참조하지 않는 것 같습니다.
어떻게 가능합니까?
고맙습니다. 참조 b가 실제로 가변 부분에 대해 _copy_로 전달되었다는 사실을 놓쳤습니다. – madmann91