Возьмите следующий класс:
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 (параметр payload), скопировать его в m_payload и затем уничтожить полезную нагрузку. Теперь подумайте, что это можно сделать 100 000 раз в секунду, я думаю, что это потраченное впустую усилие.
У меня такой вопрос, могу ли я принудительно создать встроенную конструкцию m_payload, чтобы избежать временной полезной нагрузки?
Одним из возможных решений, которое я рассматриваю, является многократная перегрузка конструкции, как показано ниже, но, честно говоря, при копировании нескольких аргументов я сомневаюсь, что это значительно экономит.
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;
};