一个类的继承,该类也继承与此类相同的基类

时间:2019-04-09 13:18:59

标签: c++ oop inheritance

对我来说,继承的优点之一是公共方法在基类中编写一次,并且每个继承类也自动具有该方法。

例如,现在让我说我想为软件中的每个类提供一个“交换”方法。提供此功能的类如下:

template< typename... DataMembers > 
class SwapMethodProvider
{
public:

    inline void Swap( SwapMethodProvider& other );

private:

    std::tuple< DataMembers... > member_dataMembers;

};

template< typename... DataMembers >
inline void SwapMethodProvider< DataMembers... >::Swap( SwapMethodProvider& other )
{
    // Swap between the tuples that contain the data members
    std::swap( member_dataMembers, other.member_dataMembers );
}

现在,如果只有一个类从中继承,那么一切都会很好。但是,如果我希望我的软件中的每个类都可以从中继承,那么以下操作将不起作用,因为直接的基类由于模糊性而无法访问:

class ExtraSauce : public SwapMethodProvider< int, double >
{};

class EvenMoreExtraSauce : public ExtraSauce, public SwapMethodProvider< int, double >
{};

然后,第一类“ ExtraSauce”可以正常工作,但“ EvenMoreExtraSauce”将无法编译。现在,我明白了为什么它不能编译,但是剩下要做的就是将类的“ SwapMethodProvider”实例存储为数据成员。我的问题只是重复代码,因为每个类都需要具有自己的“ Swap”方法,该方法调用“ SwapMethodProvider”实例的“ Swap”方法。

首先,我到目前为止是否正确?我想肯定地知道这种行为是不可能的。

第二,为什么继承在一个级别下得到如此严重的支持?编写一次方法,然后让所有对象都继承该方法真是太酷了。即使同一对象出现多次,也可能以各种方式在一个类中出现一次。

1 个答案:

答案 0 :(得分:1)

CRTP。

DECLARE @SQL nvarchar(MAX);
SET @SQL = N'CREATE USER ' + QUOTENAME(@Login) + N' FOR LOGIN '+ QUOTENAME(@Login) + N';';
EXEC sp_executesql @SQL;