接受模板类的模板函数

时间:2014-12-20 09:32:51

标签: c++ c++11 itk template-function template-classes

我想编写一个模板函数,它接受模板类作为输入参数。

template<class T>
void Function(T Input)
{

}

像上面这样的东西。这个类可以是Template类吗? 如果是的话,我该怎么写呢? 我试图这样做时出错了。请帮帮我。 提前致谢

编辑:

 template<class T>
    void ReadImage(T InputImage)
    {
        InputImage::Pointer InputImagePointer = InputImage::New();
        typedef itk::ImageFileReader<ImageType> ReaderType;
        ReaderType::Pointer ImageFileReader = ReaderType::New();

        ImageFileReader->SetFileName(FileName);
        ImageFileReader->Update();

    }

        int main()
        {
        std::string FileName = "NameOfTheFile.mhd";
            std::ifstream InputFile(FileName, ios_base::in);
        while (!InputFile.eof())
            {
                string InputData;
                //getline(InputFile, InputData);
                InputFile >> InputData;
                if (InputData == "ElementType")
                {
                    //cout << "Came Here" << endl;
                    InputFile >> InputData;
                    InputFile >> InputData;
                    if (InputData == "MET_UCHAR")
                    {
    typedef unsigned char ImagePixelType;
                    typedef itk::Image<ImagePixelType, 3> InputImageType;
    ReadImage(InputImageType);

    }
    else if(InputData == "MET_USHORT")
    {
    typedef unsigned char ImagePixelType;
                    typedef itk::Image<ImagePixelType, 3> InputImageType;
    ReadImage(InputImageType);
    }
        }
        }

我收到以下错误: 错误1错误C2275:'ImageType':非法使用此类型作为表达式

当我在if else条件下调用ReadImage()函数时出现

错误

1 个答案:

答案 0 :(得分:0)

您应该将类​​型作为模板参数传递给模板函数。

代码如此:

#include <string>
#include <iostream>
#include <fstream>
using namespace std;

namespace itk
{
    template<class T, int n>
    class Image
    {
    public:
        typedef Image*  Pointer;

        static Pointer New()
        {
            return new Image;
        }
    };

    template<class T>
    class ImageFileReader
    {
    public:
        typedef ImageFileReader*    Pointer;

        static Pointer New()
        {
            return new ImageFileReader;
        }

        void SetFileName(const std::string& fileName)
        {
        }

        void Update()
        {
        }
    };
}

template<class InputImageType>
void ReadImage(const std::string& fileName)
{
    typename InputImageType::Pointer inputImagePointer = InputImageType::New();
    typedef itk::ImageFileReader<InputImageType>    ReaderType;
    ReaderType::Pointer ImageFileReader = ReaderType::New();

    ImageFileReader->SetFileName(fileName);
    ImageFileReader->Update();
}

int main()
{
    std::string fileName = "NameOfTheFile.mhd";
    std::ifstream inputFile(fileName, ios_base::in);
    while (!inputFile.eof())
    {
        string InputData;
        inputFile >> InputData;
        if (InputData == "ElementType")
        {
            //cout << "Came Here" << endl;
            inputFile >> InputData;
            inputFile >> InputData;
            if (InputData == "MET_UCHAR")
            {
                typedef unsigned char ImagePixelType;
                typedef itk::Image<ImagePixelType, 3> InputImageType;
                ReadImage<InputImageType>(fileName);

            }
            else if (InputData == "MET_USHORT")
            {
                typedef unsigned char ImagePixelType;
                typedef itk::Image<ImagePixelType, 3> InputImageType;
                ReadImage<InputImageType>(fileName);
            }
        }
    }
}