0

例如:

template<typename T>
void write(T value)
{
    mystream << value;
}

template<>
void write<const char*>(const char* value)
{
    write_escaped(mystream, value);
}

template<>
void write<char*>(char* value)
{
    write_escaped(mystream, value);
}

template<>
void write<const std::string&>(const std::string& value)
{
    write_escaped(mystream.c_str(), value);
}

这看起来像我做错了,尤其是 const 和 non-const char* 的两个变体。但是我检查了如果我只专注于const char *然后传递一个char *变量将调用非专业版本,当在 VC++10 中这样调用时:

char something[25];
strcpy(something, "blah");
write(something);

这样做的正确方法是什么?

4

3 回答 3

1

你以正确的方式做到了。

char *并且const char *是两个不同的类型名称,它们需要各自的专业化。

于 2010-06-10T11:04:50.517 回答
1

C++ 编译器将类型 T 和类型 const T 视为不同的数据类型,因为模板适用于数据类型规范。您必须为每种显式数据类型编写显式定义。

于 2010-06-10T11:13:02.337 回答
0

鉴于 std::stringstream 已经处理了所有这些类型,你到底为什么需要专门针对它们呢?

除此之外,任何 C++ 开发人员都不应要求处理 const char*。或者使用 memcpy。只需从中制作一个 std::string 即可。并对所说的 std::string 进行 const 引用。说真的,你想在这里写C吗?

于 2010-06-10T11:29:07.743 回答