이 튜토리얼을 따라 내 싱글 톤을 만들었습니다 (내 클래스 이름은 King입니다) : https://sourcemaking.com/design_patterns/singleton/cpp/2; 당신이 볼 수 있듯이연산자 <<를 싱글 톤으로 인해 수행 할 수 없습니다
#include "King.h"
King *King::k = 0;
King *King::instance(){
if(!k){
k = new King();
//the king is green
k->setTeam(0);
}
return k;
}
//Printing the king
namespace std{
ostream& operator<<(ostream& out, const King& k){
out << "\033[32m" << "K" << "\033[0m";
return out;
}
}
, 내 문제는 내가 < < 연산자를 오버로드 할 것입니다 :
King.h :
#include "Generic_Piece.h"
class King : public Generic_Piece {
public:
//public static accessor function
static King *instance();
protected:
//singleton : define all constructors to be protected
King(){}
private:
static King *k;
};
//Print the king in green colour
namespace std{
ostream& operator<<(ostream& out, const King& k);
}
King.cpp 그래서 여기 내 코드입니다 초록색 K 인쇄하기 : 나는 주된 색깔처럼 그것을 부른다. std :: cout < < King :: instance() < < std :: endl; 그러나 주소 0x55d7a133f280을 출력합니다. 문제는 싱글 톤을 사용하는 것입니다. 나는 King :: print() 함수로 인쇄 할 수 있다고 생각하지만 실제로는 < < 연산자를 오버로드하는 것을 선호합니다. 너는 어떤 생각을 가지고 있니?
포인터를 역 참조해야하는 객체를 인쇄하려면'King :: instance'가 포인터를 반환합니다. 실제로는 싱글 톤과 아무런 관련이 없습니다. – user463035818
싱글 톤은 * anti * -pattern이고 대부분 glorified 전역 변수입니다 . 당신에게 많은 슬픔과 고통을 줄 가능성이 있습니다. 그냥 제 충고가되지 않도록하십시오. –