문제

내 새 프로젝트에서는 데이터 관리 모듈을 구축하고 있습니다. 다음과 같은 상위 레이어에 간단한 템플릿 저장 유형을 제공하고 싶습니다.

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

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

내 목표는 Boost.inter 프로세스 할당자 또는 Boost.pool 할당자(Boost Ublas Matrix 및 벡터 클래스는 할당자를 템플릿 매개변수로 사용)와 같은 다른 할당자를 사용하여 데이터 할당자를 변경하는 것입니다. 그리고 단일 클래스와 Factory 메서드만 생성하여 생성합니다. 적절한 할당자는 숨겨져 있습니다. 가상 기본 클래스는 좋을 수 있지만 템플릿과 함께 사용하는 방법을 처리할 수 없습니다. 어떤 종류의 디자인 패턴이나 솔루션을 제공합니까?

편집하다:

나는 Boost.pool 및 Boost.shared_memory_allocator를 사용할 것입니다. 간단히 말해서 나는 다른 할당 전략을 가진 다른 클래스를 갖고 싶습니다. 그러나 내 요점은 프로그램의 상위 부분이 그것에 대해 지식이 없어야 한다는 것입니다. 나에게 진짜 도전은 다른 템플릿 클래스를 수집하는 것입니다. 동일한 기본 클래스.

편집하다:사용자 정의 할당자와 함께 행렬 클래스를 사용하려는 사용자를 위한 것입니다.

그것은 다음과 같다:

 using boost::numeric::ublas;

    template<typename T, class Allocator = boost::pool_allocator<T>>
    class
    {      
      public:
      matrix<T, row_major, std::vector<T,Allocator>> mData;
    }
도움이 되었습니까?

해결책

원하는 것이 무엇인지 확실하지 않지만 어둠 속에서 촬영할 때 다음이 도움이 됩니까?

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;
}

다른 팁

유형에 따라 컴파일 타임에 할당자를 교환하려고 합니까?당신은 if-else 템플릿 및 일부 할당자 클래스(템플릿) 정의.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top