我有一些代码正在执行以下操作,但是我不明白
using BaseTypeX::BaseTypeX实际上在此代码中。我了解的其余部分,所以请不要解释模板特化等。

template<typename TReturn, typename... TArgs>
class ClassX<TReturn(TArgs...)> : public Internal::ClassXImpl<TReturn, TArgs...> {
public:

    using BaseTypeX = Internal::ClassXImpl<TReturn, TArgs...>;
    using BaseTypeX::BaseTypeX; // what is this doing exactly?

    inline ClassX() noexcept = default;

    // member function
    template<class TThis, class TFunc>
        inline ClassX(TThis* aThis, TFunc aFunc) {
            this->bind(aThis, aFunc);  // note bind is implemented in the ClassXImpl class
        }

最佳答案

这意味着您继承了Internal::ClassXImpl<TReturn, TArgs...>的所有构造函数。一个更简单的示例可能会更好地说明这一点:

struct Foo
{
  Foo(int);
  Foo(int, double);
  Foo(std::string);
};

struct Bar : Foo
{
  using Foo::Foo;
};

int main()
{
  Bar b1(42); // OK, Foo's constructors have been "inherited"
  Bar b2(42, 3.14); // OK too
  Bar b2("hello");  // OK
}

如果没有using Foo::Foo,则必须在Bar中声明和定义所有构造函数,并在它们各自的每个中调用各自的Foo构造函数。

关于c++ - 有人可以在此代码中解释使用BaseTypeX::BaseTypeX吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22973091/

10-10 22:15