멤버 변수 유형이 아닌 완전한 유형으로 만 사용할 수있는 유형을 만들고 싶습니다.struct/class에서 멤버 변수 유형으로 형식이 사용되지 않도록하려면 어떻게해야합니까?
는 그래서는 T
유형에 허용된다 :
T a;
^^^
int foo(T b);
^^^
struct C { int foo(T b); };
^^^
int main() { T c; }
^^^
하지만이 시간 오류 컴파일의 원인이된다 : 내가 지금까지 시도 아무것도 제시 아주 많이 싶습니다
struct C { T a; };
^^^
을하지만, 적어도 내가 필요한 해결책에 가까울 수있는 것은 없습니다. 미안합니다.
물론 C++에서는 가능하지 않다는 것을 증명하는 답변도받습니다.
왜이 기능이 필요한가요? 다른 개체의 요소가 될 수없는 smart pointer
을 갖고 싶습니다. 순환 종속성을 막는 나쁜 방법 ...
+! 당신의 노력에. 그러나 나는 이것이 어쨌든 나를 도왔다는 것을 의심한다. – PiotrNycz
@PiotrNycz LOL 이것은 함수의 매개 변수로 사용될 수있는 것이 ** (수정 자 외에) 항상 클래스 멤버로 사용될 수 있다는 것을 문법적 관점에서 의미합니다. 즉, 매개 변수 중 하나를 클래스 멤버로 저장하는 메서드를 방지 할 수 없습니다. ** 할당 연산자 **를 재정의하더라도 포인터, 별칭 및 캐스팅을 사용하는 모든 유형 검사를 무시할 수 있습니다. 객체 생성 방법을 제어 할 수 있습니다 (예를 들어 팩토리 메소드를 사용하여). 그러나 모든 것이 가능합니다. ** 객체가 순환 참조를 그 객체에 저장하는 것을 막을 수는 없습니다 **. –
포인터에 대한 좋은 지적, 감사합니다. – PiotrNycz