Ich versuche, eine Druckfunktion für meine Template-Klasse zu schreiben:C++ Template-Klasse Druckfunktion
struct ColumnKey;
template <class Type, class Key = ColumnKey>
class Column {
protected:
std::shared_ptr<Type> doGet() {
std::lock_guard<std::mutex> lock(mutex_);
return std::make_shared<Type>(value_);
}
void doSet(const std::shared_ptr<Type> &value) {
std::lock_guard<std::mutex> lock(mutex_);
value_ = *value;
}
private:
Type value_;
std::mutex mutex_;
};
template<class... Columns>
class Table : private Columns... {
public:
template<class Type, class Key = ColumnKey>
std::shared_ptr<Type> get() {
return Column<Type, Key>::doGet();
}
template<class Type, class Key = ColumnKey>
void set(const std::shared_ptr<Type> &value) {
Column<Type, Key>::doSet(value);
}
std::string get_table_row() {
return "hello_row";
}
};
ich eine Funktion get_table_row
in Klasse Table
, erstellen möchten, die columnA + "," + columnB + "," + ..
kehrt den ich versuche zu schreibe auf diese Weise, aber es kommt zu Kompilierungsfehlern. Kann jemand den Fehler in meiner Annäherung zeigen?
template <class Column<class Type, class Key = ColumnKey>>
std::string get_row() {
return std::to_string(*Column<Type, Key>::doGet());
}
template <class Column<class Type, class Key = ColumnKey>, class... Columns>
std::string get_row() {
return (std::to_string(*Column<Type, Key>::doGet()) + "," + Columns.get_row());
}
Ich kämpfe um das zu tun, kann mich jemand führen?
Sie können die Vorlagenargumente rekursiv durchlaufen, siehe [diese Antwort] (https://stackoverflow.com/a/12342686/948128) – piwi
Mögliches Duplikat von [Wie drucke ich die Argumente einer Funktion mit aus eine variadische Vorlage?] (https://stackoverflow.com/questions/12342633/how-do-i-print-out-the-arguments-of-a-function-using-a-variadic-template) – piwi
@piwi I denke, das ist etwas anders als das, was ich erreichen möchte. Ich habe auch 'Key', und ich möchte einen Wert zurückgeben. Außerdem möchte ich nur 'Tabelle , Spalte, Spalte >. Get_row()' aufrufen. Grundsätzlich ohne irgendwelche Argumente zu übergeben. –
user3636955