模板转换操作符

template conversion operator

本文关键字:操作符 转换      更新时间:2023-10-16

我想重载两个模板的转换操作符。

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是一个类型。