所以模板我有一個類來定義TileGrid:C++調用函數有具有繼承
template<typename T>
class TileGrid { ... };
我填寫模板與類叫做ImageTile
class ImageTile { ... };
我有一個孩子我定義的ImageTile
類看起來像這樣:
class FFTWImageTile : public ImageTile { ... };
在一個單獨的文件中我定義了以下功能:
void writeDataToFile(TileGrid<ImageStitching::ImageTile> * grid, std::string fileName);
(注:兩個ImageTile
和FFTWImageTile
都在ImageStitching命名空間)
現在所有的上述編譯就好了,但是當我嘗試使用它我收到一個錯誤。
下面是使用它的一個示例測試用例:
namespace is = ImageStitching;
TileGrid<is::FFTWImageTile> * grid = new TileGrid<is::FFTWImageTile> (...);
writeTranslationsToFile(grid, "output.txt");
當編譯測試情況下,我得到以下錯誤:
error: cannot convert ‘TileGrid<ImageStitching::FFTWImageTile>*’ to ‘TileGrid<ImageStitching::ImageTile>*’ for argument ‘1’ to ‘void writeTranslationsToFile(TileGrid<ImageStitching::ImageTile>*, std::string)’
無論如何,我可以做到這一點在C++ ??我看了遍,並不能似乎找到一些幫助,製造具有特色的有父/子關係的模板參數的函數。
編輯:
每個人的答案都十分優秀,並且每個解決這一問題提出的。我認爲決定遷移到C++ 11併爲這個特定情況使用assert。在未來,我想我會一個模板添加到功能,確保獲取數據的方式。謝謝大家的幫助!我已經標記了我認爲最好的答案,儘管每個答案都可以接受。
不幸的是我需要的是從ImageTile類得到特定屬性。如果我可以推斷typename T是某種類型的ImageTile,那麼我認爲我可以在TileGrid中添加writeDataToFile。例如,在Java –
Jameshobbs
2014-10-10 18:44:04
@Jameshobbs中,您不必推斷它,只要在代碼中假設它,並且如果傳遞的不是'ImageTile',它就不會編譯。 – 2014-10-10 19:02:26
@Jameshobbs以及,如果你需要'ImageTile'本身,爲什麼不把它傳遞給'writeDataToFile'? – 2014-10-10 19:04:05