C++ 从模板基类取消隐藏模板强制转换运算符
我有一个带模板转换操作符的模板基类。我想在派生类中取消隐藏此模板转换运算符(因为依赖名称查找)C++ 从模板基类取消隐藏模板强制转换运算符,c++,templates,inheritance,dependent-name,C++,Templates,Inheritance,Dependent Name,我有一个带模板转换操作符的模板基类。我想在派生类中取消隐藏此模板转换运算符(因为依赖名称查找) 模板 甲级 { 公众: 模板 运算符A()常量{…} }; 模板 B类:公共A { 公众: 模板 使用A::运算符A; }; 有办法做到这一点吗?上面的代码不起作用,因为它告诉我我不能为using声明模板。using声明不能引用模板id、命名空间和作用域枚举器,到基类的析构函数,或到用户定义转换函数的成员模板的专门化。模板化转换运算符将通过参数相关的查找可用。本质上,由于您总是使用B实例进行转换,a
模板
甲级
{
公众:
模板
运算符A()常量{…}
};
模板
B类:公共A
{
公众:
模板
使用A::运算符A;
};
有办法做到这一点吗?上面的代码不起作用,因为它告诉我我不能为using声明模板。using声明不能引用模板id、命名空间和作用域枚举器,到基类的析构函数,或到用户定义转换函数的成员模板的专门化。模板化转换运算符将通过参数相关的查找可用。本质上,由于您总是使用
B
实例进行转换,a
的cast操作符不会被隐藏:
#include <iostream>
template <class T>
class A
{
public:
template <class U>
operator A<U>() const {
std::cout << "The cast operator becomes availble through ADL\n";
return {};
}
};
template <class T>
class B : public A<T>
{
};
int main()
{
A<double> a1;
A<int> a2;
B<double> b1;
B<int> b2;
a1 = b2;
a2 = b1;
}
#包括
模板
甲级
{
公众:
模板
运算符A()常量{
std::cout您如何尝试使用运算符?转换为具有相同语义值的B的不同表示形式。将其用于科学单位(如boost::units)的实践项目,T是std::ratio(如std::chrono::duration)。我想看看是否可以将转换行为抽象为基类。
#include <iostream>
template <class T>
class A
{
public:
template <class U>
operator A<U>() const {
std::cout << "The cast operator becomes availble through ADL\n";
return {};
}
};
template <class T>
class B : public A<T>
{
};
int main()
{
A<double> a1;
A<int> a2;
B<double> b1;
B<int> b2;
a1 = b2;
a2 = b1;
}