次のクラスを受講します。
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;
};
Message を作成するたびに、TPayload (パラメーター ペイロード) を作成し、これを m_payload にコピーしてから、ペイロードを破棄する必要があります。これは 1 秒間に何十万回も実行できると考えてください。これは無駄な作業だと思います。
私の質問は、一時的なペイロードを回避するために m_payload のインプレース構築を強制することはできますか?
私が検討している解決策の 1 つは、以下のように構造を何度もオーバーロードすることですが、正直なところ、複数の引数のすべてのコピーに多くの節約があるとは思えません。
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;
};