1

オブジェクトに「配置」機能を実装しようとしています。以下のような構成になっています。size_t とテンプレート タイプをペアにするテンプレート オブジェクトがあります。これをベクターなどの std ライブラリ コンテナーに配置できるようにしたいと考えています。std::pair私のクラスBはデータに関する他の機能を提供するため、私は a を使用していません。

メインのように emplace を呼び出すことができるように、コードをどのように変更する必要がありますか?

#include <iostream>                                                                 
#include <vector>                                                                   
using namespace std;                                                                

class C {                                                                           
  public:                                                                           
    C(const string& _s) : s(_s) {}                                                  
    C(string&& _s) : s(_s) {}                                                       

  private:                                                                          
    string s;                                                                       
};                                                                                  

template<typename A>                                                                
class B {                                                                           
  public:                                                                           

    B(size_t _i, const A& _a) : i(_i), a(_a) {}                                     
    B(size_t _i, A&& _a) : i(_i), a(_a) {}                                                  

  private:                                                                          
    size_t i;                                                                       
    A a;                                                                            
};                                                                                  

int main() {                                                                        
  vector<B<C>> v;                                                                   
  v.emplace_back(5, "Hello");                                                       
}
4

2 に答える 2