.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();
我的问题是,当我尝试调用 print() 时。我收到错误消息说 print 不是成员函数。我也不能在派生类中使用“使用”来声明打印。
有什么办法可以解决这个问题吗?除了创建一个公共(public)基类之外?
最佳答案
尝试替换 class Derived : IF_t<...>
与 class Derived : public IF_t<...>::type
. Derived
派生自 IF_t
而不是 Base1
或 Base2
.它还需要公开,以便您可以访问 Base1
/Base2
来自 Derived
的函数.
关于c++ - 如何解决,在使用元编程的条件基类的情况下没有成员函数 "print",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35998368/