変換する cpp で StringHelper を自分で作成しました。しかし、sourceode を外部の cpp ファイル (Codeblocks-projectfile に含まれる) に入れたり、エラーを理解していないとコンパイルできません:
HPP:
#ifndef _INPUT_STRINGHELPER_HPP
#define _INPUT_STRINGHELPER_HPP
#include <string>
#include <sstream>
#include <deque>
namespace FiveDimension
{
void SplitStream(std::stringstream& s, char c, std::deque<std::string>& ret);
void SplitString(std::string s, char c, std::deque<std::string>& ret);
template<typename T> T StringToAll(std::string val);
template<typename T> bool TryStringToAll(std::string val, T &ret);
template<typename T> std::string AllToString(T val);
}
#endif
CPP:
#include "StringHelper.hpp"
void FiveDimension::SplitStream(std::stringstream& s, char c, std::deque<std::string>& ret)
{
std::string line;
while(std::getline(s, line, c))
ret.push_back(line);
}
void FiveDimension::SplitString(std::string s, char c, std::deque<std::string>& ret)
{
std::string line;
std::stringstream ss(s);
while(std::getline(ss, line, c))
ret.push_back(line);
}
template<typename T> T FiveDimension::StringToAll(std::string val)
{
std::stringstream s(val);
T ret;
s >> ret;
return ret;
}
template<typename T> bool FiveDimension::TryStringToAll(std::string val, T &ret)
{
std::stringstream s(val);
return (s >> ret);
}
template<typename T> std::string FiveDimension::AllToString(T val)
{
std::stringstream s;
s << val;
return s.str();
}
たとえば、次のことも試しました。
template<typename T> std::string FiveDimension::AllToString<T>(T val)
{
std::stringstream s;
s << val;
return s.str();
}
しかし、これはこのファイルをコンパイルすることさえできず、テンプレートについて何も知らないと感じさせてくれるので、ここに来ました。このトピックに関するアーロンの回答を読みました: 「未定義の参照」テンプレート クラス コンストラクター。その後、私は多くのことを理解しました。しかし、どうすれば関数を事前定義できますか?