.header如何解決,使用元編程
template<class T>
struct type_is
{
using type = T;
};
template<bool, class T, class>
struct IF_t : type_is<T> {};
template<class T, class F>
struct IF_t<false, T, F> : type_is<F> {};
class Base1
{
public:
void print()
{
std::cout << "Base 1" << std::endl;
}
};
class Base2
{
public:
void print()
{
std::cout << "Base 2" << std::endl;
}
};
template <int q>
class Derived : IF_t<(q > 0), Base1, Base2>
{
};
class MultipleBaseTemplateMetaProg {
public:
void print()
{
Derived<1> aDerivedTrue;
aDerivedTrue.print();
Derived<-1> aDerivedFalse;
aDerivedFalse.print();
}
};
Main.cpp的
沒有成員函數「打印」在有條件的基類的情況下MultipleBaseTemplateMetaProg aMetaProg;
aMetaProg.print();
我的問題是,當我嘗試打電話打印()。我得到錯誤說打印不是一個成員函數。我不能在Derived類中使用「using」來聲明打印。
有什麼辦法可以解決這個問題嗎?除了創建一個通用的基類?
這導致'Derived'直接從'IF_t <...>'從'Base1'或'Base2'衍生而得。 'IF_t'應該只是一個輔助結構。 – Kevin
謝謝,@Kevin - 無論如何,我認爲這裏的前三個(或這樣)類是多餘的 - 應該使用'std :: conditional'。如果不是,不能說我真的看到了使用標準庫約定(如'type')而沒有標準庫本身的區別。 –
@AmiTavory感謝您的回覆!我特別提到了這一點,因爲我將使用Enum而不是Bool。因爲我將有超過2個基本類和多個專業化....如果你看到任何其他解決方法讓我知道!還有一件事,我僅限於C++ 03 – user3801185