【发布时间】:2019-06-14 15:59:10
【问题描述】:
我有课:
template <typename val_t>
class tracer_t : public base_tracer_t<val_t> {
std::vector<std::string> m_trace;
public:
virtual void push_fact(val_t fact) override {
std::string str = "+ fact: " + to_string(fact);
m_trace.push_back(std::move(str));
}
virtual void push_rule(const std::string &id, val_t val, bool tg) override {
std::string str = "+ ";
if (tg) { str += "target: "; }
else { str += "rule: "; }
str += id + " -> " + to_string(val);
m_trace.push_back(std::move(str));
}
virtual void print() override {
std::cout << "Stack trace: " << std::endl;
for (auto it = m_trace.begin(); it != m_trace.end(); ++it) {
std::cout << (*it) << std::endl;
}
}
private:
std::string to_string(val_t val) {
if (std::is_same<val_t, std::string>::value) {
return (std::string)val;
}
return std::to_string(val);
}
};
问题是如果val_t 是std::string 则无法编译,因为:
tracer.hpp:49: error: no matching function for call to ‘to_string(std::__cxx11::basic_string<char>&)’
return std::to_string(val);
~~~~~~~~~~~~~~^~~~~
但我不知道如何解决它。我试图手动检查类型,但错误是在编译时,所以它没有帮助
【问题讨论】:
-
您可以为
val_t = std::string特化模板(或帮助模板)。 -
std::to_string不允许std::stringarg - en.cppreference.com/w/cpp/string/basic_string/to_string
标签: c++ string c++11 templates