我使用的是有兩個模板參數傳遞恆定值到模板
itk::Image<PIXELTYPE,DVALUE>
在讀我的形象會得到有關圖像的類型和尺寸信息的時間模板類。由於有類型的11個可能的值和維度的3個值(2,3,4)每次我讀取的圖像,並具有以應用我做它的操作如下:
std::string type = IOBase->GetComponentTypeAsString(IOBase->GetComponentType());
const unsigned int dim = IOBase->GetNumberOfDimensions();
if(dim ==3)
{
if(type == "unsigned_char")
{
typedef itk::Image<unsigned char,3> ImageType;
//apply operation
}
else if(type == "char")
{
typedef itk::Image< char,3> ImageType;
//apply operation
}
else if(type ==....so on
}
然後我再次有要做到這一點dim=4
和dim ==2
它增加了太多的代碼。所以,我想通過把它的值,以避免在弱光環境,如果其他檢查:
std::string type = IOBase->GetComponentTypeAsString(IOBase->GetComponentType());
const unsigned int dim = IOBase->GetNumberOfDimensions();
if(type == "unsigned_char")
{
typedef itk::Image<unsigned char,3> ImageType;
我有以下情況:
const unsigned int dimension = 3;
itk::Image<unsigned char, dimension > image;
在執行時
在這裏,我必須要找到將是什麼類型和尺寸那麼圖像將被創建。當我運行上面的代碼時,它正在工作。但是,當我試圖做到這一點的方式如下:
const unsigned int dimension = FunctionGetDimension();
itk::Image<unsigned char, dimension > image;
它不工作,即使我做的FunctionGetDimension()
返回值,爲const它無法正常工作。有沒有辦法做到這一點?
要使用工廠,你需要一個類型擦除版本的Image對象。 – petersohn
@petersohn,我對itk一無所知,但是沒有這種類型擦除的基類嗎?如果沒有,那麼我認爲不可能有一個'itk :: Image'對象和運行時確定的尺寸/類型,因爲在編譯時應該知道對象類型。同時,可能會在'Image'周圍製作一個包裝類,讓工廠以這種方式工作。 – Petr
我也不知道它。但是,當然,如果沒有基類,你可以創建這樣一個包裝器。 – petersohn