c++ - 如何解决不合格名称查找问题
问题描述
我有以下简化程序:
class Base { };
template < typename T >
class X: public T
{
public:
using TOP = T;
};
// with dependent template parm
template < typename T >
class Y: public X< T >
{
// I have to write down the full name of the base class
using X<T>::TOP::operator =;
};
// without depending template parameter
template < typename T >
class Y: public X< Base >
{
// I simply can use the defined type from the base class
using TOP::operator =;
};
int main()
{
Y< Base > y ;
}
现在的问题是,是否有任何方法可以简化基类类型的完全重复。我的原始代码是这样的:
template < typename VAR_TYPE >
class VarObserved: public ConstructAll2<
UsingHelperV_None,
UsingHelper_None,
CONTAINERL< AssignConst >,
CONTAINERL< Print >,
CONTAINERL< DataStore >,
CONTAINERL< Distribute_ >,
CONTAINERL< EndForward >,
CONTAINERSP< DataStoreBase, VAR_TYPE >
>
{
public:
using SELF = ConstructAll2<
UsingHelperV_None,
UsingHelper_None,
CONTAINERL< AssignConst >,
CONTAINERL< Print >,
CONTAINERL< DataStore >,
CONTAINERL< Distribute_ >,
CONTAINERL< EndForward >,
CONTAINERSP< DataStoreBase, VAR_TYPE > // see text 1)
>;
VarObserved( const VAR_TYPE& var ): SELF{{ var }}{}
using SELF::AssignConst::operator=;
};
如您所见,所有模板参数的完全重复并不是很“好”。有机会解决吗?
如果上面的代码没有依赖模板参数(将单行 1.))从上面的示例更改为:
CONTAINERSP< DataStoreBase, int>
该类变得非常简单并且更易于维护:
...
VarObserved( const VAR_TYPE& var ): ConstructAll2{{ var }}{}
using AssignConst::operator=;
....
作为对潜在问题的参考,我已经发现了那个问题
但不知道简化我的代码。
解决方案
现在的问题是,是否有任何方法可以简化基类类型的完全重复。
要查找TOP
在依赖基类中声明的名称,您可以编写Y::TOP
代替X<T>::TOP
,尽管这可能会使读者感到困惑,您可能应该评论一下为什么要这样做。
之所以可行,是因为它不再是不合格的查找。请注意,您不需要在这里写出模板参数(Y
是注入的类名,与 的含义相同Y<T>
)。
推荐阅读
- .net - Gremlin 在 .net 中配置 JanusGraph
- java - 为 java 客户端使用 openapi 生成器时,通用对象名称未序列化
- php - PHP注册表不会将数据传输到mysqli
- azure - 订阅级别的 Azure 策略不起作用
- file - 从不同的目录检索相同的文件名(例如 - a.xyz),唯一的区别是后缀(例如 - surf_001、surf_002、surf_003)
- java - 来自 2 个(或更多)字符串的压缩字符串 - "AB" + "YZ" = "AYBZ"
- sql-server - 如何为 Django 指定正确的模式格式?“错误:无法准备语句。(8180)”
- python - 如何在 python 中拟合数据集?- lr.fit(x_train, y_train) 给我错误
- html - 如何在 textarea 标签中显示 HTML textarea 片段?
- postgresql - 如何在 SQL 中运行 psql 元命令