我有一些代码正在执行以下操作,但是我不明白
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/