我當然可以使用is_base
如果基類不是模板。然而,當它是,我只是沒有看到任何方式一般匹配任何派生類型。下面是我的意思一個基本的例子:是否可以匹配模板專業化中的模板化基礎?
#include <boost/mpl/bool.hpp>
template < typename T >
struct test_base
{
};
template < typename T >
struct check : boost::mpl::false_ {};
template < typename T >
struct check<test_base<T> > : boost::mpl::true_ {};
struct test_derived : test_base<int> {};
#include <iostream>
int main()
{
std::cout << check<test_derived>::value << std::endl;
std::cin.get();
}
我想這回true_
而非false_
。真正的例子有7個模板參數,大多數是默認的,並且使用Boost.Parameter來引用它們的名稱。爲了使用is_base
,我必須能夠以某種方式拉出參數,並且我沒有看到一種方法來做那些聲明內部typedef的方法。
我認爲這是不可能的。希望被證明是錯誤的。
可以引入獨特的標籤類型爲中試基地和禁用/啓用基於這樣? – Anycorn 2010-08-04 16:58:39
這是一個可行的選擇,我應該想到我自己。如果沒有它,任何人都可以找到解決方法,仍然感興趣。 – 2010-08-04 17:06:36
@aaa - 你應該做出答案。有一種感覺,這是唯一可能的方法,所以在幾天之後,我沒有得到答案,你也可以得到好評。 – 2010-08-04 17:19:09