2014-02-19 3 views
0

일반 아키텍처를 개선하려고 노력 중이며이 유형의 모호한 컨텍스트 참조를 사용하는 시스템이 내 용도에 이상적이라고 판단했습니다. 그러나 구문을 작동시키는 방법을 찾는 데 문제가 있습니다. 나는 이런 일이 가능할 지 모르겠다! 나는 대부분 같은 일을 수행하지만, 이것은 가장 좋은 것입니다 약간 shiestier 대안이 : 난 당신이 구현하려는 않는 것을 확실하지 않다C++ 비 형식 템플릿 템플릿 매개 변수, this에 대한 참조

class IContained 
{ 
public: 
    virtual int getInt() = 0; 
}; 
typedef std::shared_ptr<IContained>IContainedPtr; 

template<template<class RefType, RefType& itsRef> class ContainedType> 
class TestClass 
{ 
    TestClass() : 
     myContained(new ContainedType < TestClass, *this>()) 
    { 

    } 

    int getContextInt() 
    { 
     return 3; 
    } 

    IContainedPtr myContained; 
}; 

template<class RefType, RefType& itsRef> 
class Contained: 
    virtual public IContained 
{ 

    int getInt() 
    { 
     return itsRef.getContextInt(); 
    } 
}; 

TEST(POTATO, PARTY) 
{ 
    TestClass<Contained> myTest(); 

    int thing = myTest.myContained->getInt(); 

    EXPECT_EQ(thing, 3); 
} 
+0

성취하려는 것을 설명하기 위해 단어 또는 더 나은 클래스 다이어그램을 사용하는 것이 더 나을 수도 있습니다. 코드가 컴파일 할 때조차 가까이 있지 않으므로 코드만으로 질문을 추론하기는 어렵습니다. –

+0

좁혀 주시겠습니까, 당신은 무엇을 도와주고 싶습니까? "나를 위해 일하는 것"이 ​​너무 광범위합니다. – Warlord

+0

죄송합니다. 누군가가 시력으로 문제를 인식 할 수 있다고 생각했습니다. 고맙게도 누군가가 그랬던 것처럼 보입니다. 나는 당신이 내가 어떻게 클래스들을 구현하기를 바라는 지 알 수 있도록 나의 GTest 물건들을 포함시켰다. 상황에 맞는 방법을 설명하는 데는 시간이 좀 걸릴 것입니다 ... 어쨌든 시간을내어 주셔서 감사합니다. 나는 지금 그것이 무엇이 잘못되었는지 압니다. – WhittlesJr

답변

0

하지만 난 당신이 사용할 수없는 이유를 설명 할 수

*this 

을 템플릿 인수로 사용하십시오. 템플릿은 컴파일 타임 다형성을 제공합니다. 모든 템플릿 인수는 컴파일시 알려 져야 함을 의미합니다.

this 

은 클래스 인스턴스 변수이며 인스턴스 인스턴스의 주소이므로 컴파일하는 동안 확인할 수 없습니다.

*this 
+0

아, 그게 문제가되어야합니다. 글쎄, 공. 오 잘, 나는 계획 B와 함께 가야 할 것이다. 고마워! – WhittlesJr

관련 문제