1
私はstd :: tupleから派生したクラスにいくつかの値を代入しようとしていました。 私が最初に考えたのは、make_tuple
を使用して、それをoperator=
とコピーすることでしたが、それはうまくいきませんでした。std :: tupleをコピーする
タプルの値を手動で代入した場合、問題はありませんでした。のみ与えassign3
で
#include <tuple>
template <class idtype>
class Userdata: public std::tuple<idtype, WideString, int>
{
public:
/* compile error
void assign1(const idtype& id, const WideString& name, const int lvl)
{
(*this)=std::make_tuple(id, name, lvl);
}
*/
void assign2(const idtype& id, const WideString& name, const int lvl)
{
(std::tuple<idtype, WideString, int>)(*this)=std::make_tuple(id, name, lvl);
}
void assign3(const idtype& id, const WideString& name, const int lvl)
{
std::get<0>(*this)=id;
std::get<1>(*this)=name;
std::get<2>(*this)=lvl;
}
void print(const WideString& testname) const
{
std::cout << testname << ": " << std::get<0>(*this) << " " << std::get<1>(*this) << " " << std::get<2>(*this) << std::endl;
}
Userdata()
{
}
};
int main(int argc, char *argv[])
{
Userdata<int> test;
/*
test.assign1("assign1", 1, "test1", 1);
test.print();
*/
test.assign2(2, "test2", 2);
test.print("assign2");
test.assign3(3, "test3", 3);
test.print("assign3");
}
assign2: 0 0
assign3: 3 test3 3
:
だから私は、コードの小さな作品を書いている、特にこの単一のものをテストするために、プロジェクトからそれを抽出します期待される結果。 したがって、私は簡単にassign3
関数を使うことができますが、私はまだassign2
で何が問題なのか疑問に思っています。
Btw、単純な構成ではなく、ここに継承してもよろしいですか? –
@BaummitAugen私は同じことを提案しようとしていましたが、私が把握していないものがあるかもしれないと考えました。 –
@BaummitAugen下記の返信をありがとう。はい、私は継承が必要でした。なぜなら、他の関数がそこでタプルとやりとりすることを期待しているからです。 :) – DrHell