模板转换操作符
template conversion operator
我想重载两个模板的转换操作符。
A.h
#pragma once
#include <B.h>
template <typename T> class A
{
operator B<T>() const;
}
B.h
#pragma once
#include <A.h>
template <typename T> class B
{
operator A<T>() const;
}
I got error
error C2833: 'operator A' is not a recognized operator or type see
reference to class template instantiation 'B<T>' being compiled
如果只在一个模板中重载转换操作符,
您有一个循环依赖问题。您需要有一个前向声明,例如:
A.h:
#pragma once
template <class T> class B;
template <class T> class A {
operator B<T>() const;
};
#include "B.h"
template <class T>
A<T>::operator B<T>() const {
foo();
}
B.h:
#pragma once
#include "A.h"
template <class T>
class B {
operator A<T>() const {
bar();
}
};
我假设你用的是#include "A.h"
。当编译器开始编译B.h时,它还没有看到A.h的声明,因此编译器不知道如何解释operator A<T>() const
,因为它不知道a是一个类型。
相关文章:
- 我可以将C 17 Capture lambda ConstexPR转换操作符的结果用作函数指针模板非类型参数吗?
- Clang vs GCC vs MSVC模板转换操作符-哪个编译器是正确的
- 为什么操作符的新函数需要强制转换
- c++中从整数到字符串的转换中,左移操作符是做什么的?
- 模板类型转换操作符=
- 链接隐式转换操作符
- 强制转换操作符函数在g++中可以很好地编译,但在其他编译器中不行.为什么
- 当目标类有多个构造函数时,消除强制转换操作符的歧义
- 删除转换操作符
- 强制转换操作符重载和引用
- 实现没有临时的转换操作符
- 不同的强制转换操作符被不同的编译器调用
- 将操作符转换为模板实参的特化
- 为什么模板化的用户定义转换操作符能够确定其返回类型?
- const转换操作符
- 在可强制转换为另一个模板类型的类模板中重载赋值操作符
- 调用转换操作符不能用于静态const变量
- 内部编译器错误-开关表达式中的模板化转换操作符
- 强制转换操作符可以是显式的吗?
- 在返回语句中统一初始化,并显式将操作符转换为bool