这不是此question的副本。
下面,我列出了我的基类以及如何从中派生一个类:
template<template<size_t, typename...> typename D>
struct Modifier
{
// some static variables
};
template<typename M, size_t U, typename T, typename... S>
struct Base
{
// some implementations
};
template<size_t U, typename T>
struct Derived;
template<>
struct Modifier<Derived>;
template<size_t U, typename T>
struct Derived : Base<Modifier<Derived>, U, T, double>
{
using Base<Modifier<Derived>, U, T, double>::Base;
};
为了提供一些上下文,我们的想法是Base
的实现将访问M
的一些静态变量,以更改几个函数的行为。
当我使用msvc(构建工具v142)进行编译时,它抱怨:
1>...: error C3210: 'Base<Modifier<Derived<2,unsigned __int64> >,2,unsigned __int64,double>': a member using-declaration can only be applied to a base class member
1>...: error C3881: can only inherit constructor from direct base
但是,当我介绍using mod_t = Modifier<Derived>;
并将其应用到Derived
的实现中而不是全名时,它将正确编译。
顺便说一句,无论我是像上面一样定义Derived
还是像这样:
template<size_t U, typename T>
struct Derived : Base<Modifier<Derived>, U, T, double>
{
using parent_type = Base<Modifier<Derived>, U, T, double>;
using parent_type::Base;
};
或
template<size_t U, typename T>
struct Derived : Base<Modifier<Derived>, U, T, double>
{
using parent_type = Base<Modifier<Derived>, U, T, double>;
using parent_type::parent_type;
};
我仍然会收到错误消息。
我在这里想念什么?
答案 0 :(得分:0)