.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