考慮下面的代碼序列:編譯的時候類選擇與模板的基礎
#include <iostream>
using namespace std;
template <typename T>
class Base
{
public:
T* t;
void b() {}
};
class D1:
public Base<D1>
{
public:
int d1;
};
class D2:
public D1
{
public:
int d2;
};
template <typename T>
class Selector
{
public:
template <typename U>
void a(Base<U>& base)
{
cout << __LINE__ << endl;
base.b();
}
template <typename U>
void a(U& u)
{
cout << __LINE__ << endl;
}
};
int main()
{
D2 derivated;
Selector<D2> s;
s.a(derivated);
return 0;
}
我要檢查一些類(D2)是否有基地(基地),繼承任何D2的父母。 我只是不能得到Selector
擊中最專業的成員功能。
的問題,這是任何類型的隱式轉換爲'富'也將返回TRUE;。這就是爲什麼boost :: is_base_of'太複雜了。 – Xeo
@Xeo:是的,好點。我們希望'Foo '沒有任何隱式轉換。畢竟,它在OP的控制之下。 –
@Xeo:實際上,'std :: is_base_of'是一個庫函數還是一個內置的編譯器? –