通过构造函数构造成员变量
参加以下课程:
template <typename TPayload>
class Message
{
public:
Message(const TPayload& payload)
: m_header(sizeof(TPayload)),
m_payload(payload) {}
private:
const Header m_header;
const TPayload m_payload;
};
每当构造消息时,都必须创建TPayload(参数有效负载),将其复制到m_payload中,然后销毁有效负载。现在考虑到每秒可以完成100'000次,我认为这是浪费的精力。
我的问题是,我可以强制就地构建m_payload以避免临时有效负载吗?
我正在考虑的一种可能的解决方案是使构造多次过载,如下所示,但是老实说,我对所有argumwents的复制都非常怀疑,我怀疑这样做是否会节省很多。
template <typename TPayload>
class Message
{
public:
template <typename A>
Message(const A& a)
: m_header(sizeof(TPayload)),
m_payload(a) {}
template <typename A, typename B>
Message(const A& a, const B& b)
: m_header(sizeof(TPayload)),
m_payload(a, b) {}
private:
const Header m_header;
const TPayload m_payload;
};
没有找到相关结果
已邀请:
2 个回复
缮淳彼誊
的构造函数参数转发给
的构造函数。 这可以在C ++ 11中完成(使用可变参数模板和
,如
和许多其他函数中所用),也可以在C ++ 03中重载,如您开始编写时所用,以及如
所用 例如:
试运行:https://ideone.com/J1JnZ
辽躺
只要确保TPayload具有正确定义和有用的move构造函数,否则就不会做很多事情。