[英]How can I determine data type during runtime in C++?
我有一個從A派生的B類:
template<class T>
class A
{
class iterator; // Defined fully
iterator begin ()
{
// Returns a pointer to the first element
}
iterator end ()
{
// Returns a pointer to the last element
}
}
template <class T>
class B : public A
{
// It automatically inherits the iterator
}
template <typename InputIterator>
void foo (InputIterator first,InputIterator last)
{
// Some code to infer whether it is of type A or B
}
現在,有些函數說foo()
是一次使用B::begin()
調用的,而有時是通過A::begin()
調用的。
我需要在運行時確定類型以推斷類型並設置一些標志變量。 我該怎么做呢? 我嘗試使用typeinfo()
但它為兩個迭代器返回相同的值。
在庫type_traits中,您可以使用一些類型魔術:
is_base_of-如果Base是Derived的底數,則返回true。
is_same-如果A與B的類型相同,則返回true。
帶有type_traits的所有內容都可以在這里找到http://www.cplusplus.com/reference/type_traits/?kw=type_traits
它們不是運行時,而是結構和模板的魔力,C ++默認不支持將類型作為數據。 如果願意,可以使用Boost庫,它確實支持我所知道的類型。
UPD:
正如在該問題下提到的注釋一樣,A :: iterator與B :: iterator完全相同,因此,不查看類,它們是相同的內存塊。
因此,解決方案(也許)是創建一個稍微不同的函數,實際上取決於類:
template <typename LeftClass, typename RightClass>
void foo (LeftClass left, RightClass right)
{
if(is_same<LeftClass, RightClass>::value)
{
}
//Or that
if(is_same<LeftClass, A>::value && is_same<RightClass, A>::value)
}
只是別忘了與班上的這個“朋友”。
typeinfo()
返回相同的值,因為A::begin()
和B::begin()
為您提供了相同類型的值。
您應該讓B::iterator
從A::iterator
B::iterator
繼承,或者在A::iterator
有一個特殊的函數,該函數將對其容器的引用/指針返回(然后是類型A
或類型B
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.