저는 튜플과 같은 데이터 구조로 실험 해 왔습니다. 각 유형의 오브젝트 중 하나만 포함하고 각 오브젝트는 C 스타일의 PODS 여야합니다. 이 클래스는 보유한 객체에 액세스하는 기괴한 방법을 사용하며,이 클래스는 파생 클래스의 참조를 반환합니다. 마찬가지로 :부모 클래스에 대한 참조 반환 C++
template<class... Ts>
class Container : private Ts...
{
public:
template<class T>
T& get_component()
{ //returns reference to base class specified by T
return static_cast<T&>(* const_cast<Container<Ts...> *>(this));
}
};
그리고 의도는 다음과 같이 사용합니다 : 그것은 &를 T로 static_casts보다 내가 사용하는
struct A { int x, y; };
struct B { float x, y; };
int main()
{
using namespace std;
Container<A, B> foo;
A& a_ref = foo.get_component<A>();
a_ref.x = 5;
a_ref.y = 10;
const B& b_ref = foo.get_component<B>();
cout << b_ref.x << endl;
cout << b_ref.y << endl;
}
방법은 다음 역 참조,이에 const_cast한다. 내가 사용하고있는 기술에 함정이 있습니까? 테스트에서 나는이 디자인을 예상대로 수행하는 것 같았습니다.
편집 : const_cast는 중복됩니다. 이 포인터에 대한 참조를 할당하는 것에 대한 오해가있었습니다. 난 그냥 static_casting T & dereferenced해야합니다.
왜 처음에는'const_cast'를 사용하고 있습니까? 당신은 단지 같은 유형으로 캐스팅하는 것입니다. – 0x499602D2
'const'를 추가하려면'static_cast'를 사용할 수 있습니다. – krzaq
@krzaq 아니면 반환 유형을'const T &'로 변경하고'const' 함수도 만드십시오 – user4407569