オブジェクトをVector配列に積んだり消したりするソースでも書くか・・・
#include <vector>
#include <algorithm>
using namespace std;
class A
{
public:
A() = delete;
A(int item) : m_item(item) {}
private:
int &m_item;
};
class MainProc
{
public:
void AddVector(A obj)
{
m_vecA.emplace_back(obj);
}
void DelVector(A srcobj)
{
if (m_vecA.size())
{
auto it = remove_if(m_vecA.begin(), m_vecA.end(),
[&](A &dstobj) { return (dstobj.m_item == srcobj.m_item); });
m_vecA.erase(it, m_vecA.end());
}
}
private:
vector<A> m_vecA;
};
int main()
{
MainProc MP;
int i1 = 1, i2 = 2;
A obj1(i1), obj2(i2);
MP.AddVector(obj1);
MP.AddVector(obj2);
MP.DelVector(obj1);
}
ビルドしたら難しそうなエラーが出ました。
main.cpp:24:122: required from here
/usr/include/c++/7/bits/stl_algo.h:871:16: error: use of deleted function ‘A& A::operator=(A&&)’
*__result = _GLIBCXX_MOVE(*__first);
^
main.cpp:5:7: note: ‘A& A::operator=(A&&)’ is implicitly deleted because the default definition would be ill-formed:
class A
:
想像なのであまりあてにしないで欲しいんですが、多分↓のような感じ?
・remove_ifとかeraseのところでclassAの代入(operator=)をしたいよ
→でもoperator=はこちらでdeleteしときましたよ
→なんでかというと代入できるならしたいけどclassAのメンバーにリファレンスがいて無理だからだよ
面倒なのでclassAのm_itemをポインタ型にして解決しました。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント