【发布时间】:2020-01-17 17:25:40
【问题描述】:
我有类似下面的代码:
class CIntColumn : public CColumn
{
public:
CIntColumn(LPCTSTR pszName)
{
}
// Etc.
}
class CTextColumn : public CColumn
{
public:
CTextColumn(LPCTSTR pszName, int nMaxLength)
{
}
// Etc.
}
template<typename BASE_TYPE>
CNullableColumn : public BASE_TYPE
{
public:
// Questions about code that goes here
}
class CNullableIntColumn : public CNullableColumn<CIntColumn>
{
public:
CNullableIntColumn(LPCTSTR pszName)
: CNullableColumn<CIntColumn>(pszName)
{
}
}
class CNullableTextColumn : public CNullableColumn<CTextColumn>
{
public:
CNullableTextColumn(LPCTSTR pszName, int nMaxLength)
: CNullableColumn<CTextColumn>(pszName, nMaxLength)
{
}
}
因为CNullableIntColumn 需要将一个参数传递给基类,而CNullableTextColumn 需要将两个参数传递给基类,所以这段代码不会编译。
有什么技巧可以修改我的CNullableColumn<> 模板类,使其支持这两种情况吗?理想情况下,我可以使用某种条件编译,但 C++ 似乎不支持这里需要的那种。
【问题讨论】:
-
您希望
CNullableColumn将某个常量传递给int nMaxLength,还是需要一个额外的构造函数参数? -
@HolyBlackCat:我希望它将构造函数参数传递给
CTextColumn。抱歉,更新了代码。 -
也许您可以继承构造函数而不是手动编写它们? (
CNullableColumn中的using BASE_TYPE::BASE_TYPE,派生类中的using CNullableColumn<blah>::CNullableColumn)这只有在您的实际代码中CNullable*Column构造函数除了调用父母的构造函数之外什么都不做时才有效。
标签: c++ templates inheritance constructor