Ich suche nach einer eleganten Lösung für das folgende Problem. Ich habe eine Task-Struktur, die ich für verzögerte Funktionsaufrufe verwende.
template struct Task1
{
T Arg1;
Delegate TaskDelegate;
};
Das Problem, das ich habe, ist folgendes:
Task1 MyTask;
Das führt dazu, dass der Parameter als Konstante Referenz gehalten wird. Weiß jemand eine gute Lösung, um dieses Problem zu umgehen? Ich könnte Regeln durchsetzen, dass die Delegat-Signatur immer const&-Parameter annimmt, aber das scheint restriktiv zu sein. Ich könnte immer zwei Task-Strukturen haben (eine für Verweis und eine für Wert), aber das scheint hässlich zu sein.
Die andere Lösung wäre, das folgende zu erstellen:
template struct Task1
{
T2 Arg1;
Delegate TaskDelegate;
};
Gibt es einen Weg, T2 standardmäßig auf denselben Typ wie T1 zu setzen? Auf diese Weise brauche ich jedes Mal, wenn ich eine Methodenwertsignatur habe, keine zusätzlichen Vorlagenparameter.
EDIT: Die Vorlage wird für einen mehrfädigen Task-Scheduler verwendet. Hier ist ein Beispiel:
void MyClass::Populate(const std::string& instrText);
CTaskScheduler::Schedule(Task1(this, &MyClass::Popluate, "MeinString"));