2012-08-25 90 views
2

可能重複:
Dynamic dispatching of template functions?動力使用顯式實例化的模板

我想用非類型模板來創建網格單元有不同的內存空間,而不必使用動態分配堆上的內存,例如

template <int cell_size> 
class myCell {...} 

單元格大小有限(大約10),因此我可以很容易地明確地實例化所有單元格。但是,需要哪一個單元在編譯時不知道,但僅在運行時才知道。

我知道,模板是一個編譯時的概念,但有以這種方式使用模板類的方式,尤其是因爲我可以保證所有必要的細胞類型顯式實例?

回答

1

您可以使用工廠模式,但你需要一個基類作爲返回類型:

template <int cell_size> 
class myCell : public cellBase {...} 

struct CellFactory 
{ 
    static cellBase* getCell(int cell_size) 
    { 
     switch (cell_size) 
     { 
     case 1: 
      return new myCell<1>; 
      break; 
     //and so on 
     } 
    } 
} 

這工作,因爲你告訴它特能期望編譯器。但我認爲對於您正在嘗試解決的潛在問題,存在更好的設計。

+0

通過「好設計」,你的意思的東西比工廠模式,或者東西比使用模板其他別的嗎? –

+0

@MichaelSchlottke除了模板之外的東西。真的取決於實際問題。 –

+0

我想過用的模板,因爲這將讓編譯器在電池內部數據優化循環。據我瞭解C++,如果'cell_size'只是一個成員變量,用於在堆中分配內存,在單元格數據全部循環將被執行的,是的,因爲編譯器不能做出最好的優化策略的任何扣除在編譯時。 –