微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

完美转发和dll导出

如何解决完美转发和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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?