【发布时间】:2011-12-18 23:31:25
【问题描述】:
我正在为我的结构使用模板,例如:
#pragma pack(push, 1)
template <typename T>
struct S
{
T t;
inline void Set(const T& val) { t = val; }
}
#pragma pack(pop)
T 可以是 float、int、short 或 char[10]、char[1] 或 char[2](最好是任何长度都可以)。
虽然上面的方法对于整数类型来说效果很好,但我在实现 char[n] 部分时遇到了困难:
- 我需要使用 strncpy 或 memcpy 而不是赋值运算符
- 使用上述方法,编译器会抱怨签名 (const char[2]& val) 以及我通过 s.Set("T") 调用它。
- 具有整数类型和字符类型的 S 之间的接口必须与调用它们的通用代码相同(并且不关心它们是什么类型)。
【问题讨论】:
-
为什么是
char[]s 而不是std::strings?你不会有这些问题。 -
@Mat 它用于打包结构的上下文中,直接放在网络上,不幸的是 std::string 不能用于此目的。
-
您仍然可以将
std::string用于您的Set方法。 -
@Mat 不确定我是否在关注。 Set方法中的参数类型不需要和typename T一样吗?
-
@Mat:这不会太短。 Christkirk:是的。看我的回答,你的代码很好。
标签: c++ templates struct arrays