2009-04-07 2 views
0

을 내 새로운 프로젝트에서 내가동적 :: 향상에 벡터를 할당 전략을 변경하고 부스트 : 매트릭스

template<typename T> 
class Data 
{ 
public: 
    T getValue(); 
private: 

boost::numeric::ublas::matrix<T> data; 
} 

같은 상위 계층에 대한 간단한 템플릿 저장 유형을 제공 할 module.I 데이터 관리를 구축하고 내 목표는 Boost.inter 프로세스 할당 자나 Boost.pool 할당 자와 같은 다른 할당자를 사용하여 데이터 할당자를 변경하는 것입니다 (부스트 Ublas 행렬 및 벡터 클래스는 할당자를 템플릿 매개 변수로 사용합니다). 그리고 단일 클래스 및 Factory 메소드를 사용하여 적절한 allocator under cover.A 가상 기본 클래스는 달콤한 수 있지만 템플릿을 사용하는 방법을 처리 할 수 ​​없습니다. 어떤 종류의 디자인 패턴 또는 솔루션을 제공합니까?

편집 : it.Real 도전에 대한 지식이 있어야하지 않는다 나의 점은 프로그램의 상단 부분입니다 strategies.But 내가 다른 할당과 다른 클래스를 갖고 싶어 boost.pool 및 boost.shared_memory_allocator.Briefly를 사용합니다

나를 위해 동일한 기본 클래스를 가진 다른 템플릿 클래스를 수집하는 것입니다.

편집 : 사용자 지정 할당자를 사용하여 매트릭스 클래스를 사용하려는 사용자에게 적합합니다.

는 다음과 같이이다 :

using boost::numeric::ublas; 

    template<typename T, class Allocator = boost::pool_allocator<T>> 
    class 
    {  
     public: 
     matrix<T, row_major, std::vector<T,Allocator>> mData; 
    } 

답변

0

당신이 원하는 것이 분명하지 않지만, 어둠 속의 한 장면으로 다음과 같은 것이 도움이됩니까?

template<typename T> 
class IData 
{ 
public: 
    virtual T getValue() = 0; 
    virtual ~IData() {} 
}; 

template<typename T, typename Allocator=std::allocator<T> > 
class Data : public IData<T> 
{ 
public: 
    virtual T getValue(); 
private: 

boost::numeric::ublas::matrix<T, Allocator> data; 
} 
+0

죄송합니다. 받아 들일 수는 없지만 귀하의 방법은 실현 가능합니다. – Qubeuc

+0

차가움 :) 도와 줘서 다행 –

0

당신은 유형에 따라 컴파일시에 할당자를 교체하려고합니까? if-else 템플리트와 일부 할당 기 클래스 (템플리트) 정의가 필요합니다.

런타임 할당자를 원한다면 기본 클래스 (인터페이스 정의 클래스)를 템플릿에 넣고 충족시켜야하는 조건에 따라 적절한 하위 클래스를 전달하십시오.