完美转发和dll导出

问题描述

我试图在我的自定义向量类上使用完美转发(在某种意义上模仿 std::vector“emplace_back”)并从它定义的 dll 中导出它。

  • repeated_ptr_field.hpp

     template<typename TMessage>
     class RepeatedPtrField
     {
     private:
         std::vector<std::unique_ptr<TMessage>> v_;
    
     public:
         RepeatedPtrField(const RepeatedPtrField& other) = delete;
         RepeatedPtrField& operator=(const RepeatedPtrField& other) = delete;
         RepeatedPtrField();
    
         // Some things...
    
         TMessage* Add()
         {
             // This one is ok so far
             v_.push_back(std::make_unique<TMessage>());
             return v_.back().get();
         }
    
         template <typename ...Args>
         TMessage* Add(Args&& ...args)
         {
             // This one is giving me headaches
             v_.push_back(std::make_unique<TMessage>(std::forward<Args>(args)...));
             return v_.back().get();
         }
    
         // Some other things...
     };
    
  • repeated_ptr_field.cpp

     template __declspec(dllexport) Value* RepeatedPtrField<Value>::Add(double&&,Currency&&,long&&);
    
  • value.hpp

     class Value : public Message
     {
         // Some things...
    
     public:
         // Both constructors defined in .cpp
         __declspec(dllexport) Value();
         __declspec(dllexport) Value(double value,Currency ccy,long timestamp); // This is the constructor that should be used by the Add(args...) method.
    
         // Some other things...
     };
    

我收到编译器错误'Value::Value':没有重载函数需要 3 个参数

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...