我一直在嘗試一個類似於元組的數據結構。它應該只包含每種類型的對象中的一種,並且每個對象都應該是一個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));
}
};
和預期使用這樣的:
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這一點,那麼取消對它的引用,比static_casts它到T &。我正在使用的技術有沒有陷阱?在我運行的測試中,這種設計似乎按預期執行。編號: const_cast是多餘的。我對分配給這個指針的引用有一種誤解。我應該static_casting T &來解除這個。
爲什麼你首先使用'const_cast'?你只是投射到相同的類型。 – 0x499602D2
如果你想添加'const',你可以使用'static_cast' – krzaq
@krzaq或者你只是改變返回類型爲'const T&'並且使函數爲'const' – user4407569