Я ищу элегантное решение следующей проблемы. У меня есть структура задач, которую я использую для отложенных вызовов функций.
template <typename T> struct Task1
{
T Arg1;
Delegate<T> TaskDelegate;
};
У меня проблема в следующем:
Task1<const Foo&> MyTask;
Это приведет к тому, что параметр будет сохранен как постоянная ссылка. Кто-нибудь знает хорошее решение, чтобы обойти это? Я мог бы применять такие правила, как подпись делегата, всегда принимающая const & params, но это кажется ограничительным. Я всегда мог иметь две структуры задач (одну для ссылки и одну для значения), но это кажется неприятным.
Другим решением было бы создать следующее:
template <typename T1, typename T2> struct Task1
{
T2 Arg1;
Delegate<T1> TaskDelegate;
};
Есть ли в любом случае по умолчанию T2 того же типа, что и T1? Таким образом, всякий раз, когда у меня есть подпись значения метода, мне не нужны дополнительные параметры шаблона.
EDIT:
Шаблон используется для многопоточного планировщика задач. Вот пример:
void MyClass::Populate(const std::string& instrText);
CTaskScheduler::Schedule(Task1<const std::string&>(this, &MyClass::Popluate, "MyString"));