- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
因此,我有一个dll,可导出从显式实例化(也已导出)的模板派生的类。
parent.hpp
#pragma once
template <typename T>
struct parent {
parent(T t) m_t(t) {};
void print();
T m_t;
};
template<typename T>
void parent<T>::print() {
cout << m_t << endl;
}
template class LIB_API parent<int>;
#include "parent.hpp"
extern template class parent<int>;
struct LIB_API child : public parent<int> {
using parent<int>::parent;
void some_method();
}
some_method
child
类时,就会出现问题:
void func()
{
child c(53);
c.print();
c.some_method();
}
warning C4661: 'void parent<int>::print(void)': no suitable definition provided for explicit template instantiation request
最佳答案
该代码包含许多错误,可能是一些错误,其他一些则丢失了代码部分,依此类推。
您得到的警告是因为显式实例化的模板(parent<int>
)在some_other_dll_file转换单元中没有定义(仅声明)打印方法。检查[SO]: warning C4661:no suitable definition provided for explicit template instantiation request (@SergeBallesta's answer)。您可以通过在parent.hpp中移动打印的正文来摆脱警告。
下面是一个工作示例。
#pragma once
#if defined (DLL00_INTERNAL) || defined(DLL00_STATIC)
# define DLL00_API
#else
# if defined(DLL00_EXPORTS)
# define DLL00_API __declspec(dllexport)
# else
# define DLL00_API __declspec(dllimport)
# endif
#endif
#pragma once
#include <dll00.h>
#include <iostream>
template <typename T>
class parent {
public:
parent(T t): m_t(t) {};
void print();
private:
T m_t;
};
template <typename T>
void parent<T>::print() {
std::cout << m_t << std::endl;
}
#define DLL00_EXPORTS
#include <parent.hpp>
template class DLL00_API parent<int>;
#pragma once
#include <dll00.h>
#include <parent.hpp>
extern template class parent<int>;
class DLL00_API child : public parent<int> {
public:
using parent<int>::parent;
void some_method();
};
#define DLL00_EXPORTS
#include <child.hpp>
#include <iostream>
void child::some_method() {
std::cout << "child::some_method" << std::endl;
}
#define DLL00_INTERNAL
#include <child.hpp>
void func() {
//*
child c(53);
c.print();
c.some_method();
//*/
}
#include <child.hpp>
int main() {
child c(12);
c.print();
c.some_method();
return 0;
}
#pragma warning(disable: 4661)
。但是请记住,在某些情况下忽略警告可能会给您带来麻烦。
关于c++ - 如何使用从dll中显式实例化模板派生的dllexport-ed类,而不会发出警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60691534/
For 循环和多个变量和条件。 我正在使用 for 循环来设置源索引和目标索引以复制数组中的项目。 for(int src = 0, dst = 8; src = 0; src ++,
我正在尝试创建一个 2 面的 ggplot 对象,并将它们 grid.arrange 在两列中(grid.arrange 列)。在第二列中,在每个分面成员中,我想插入一个直方图。两列的数据源也不同。到
我正在使用 MS VS2010 和一个名为 Deleaker 的插件来发现我可能错过的任何内存泄漏。它告诉我 fopen_s 行有 2 处内存泄漏,但我没有在该行的任何内容上使用 new 或 mall
java.nio.charset.Charset.forName("utf8").decode解码 的字节序列 ED A0 80 ED B0 80 进入 Unicode 代码点: U+10000
我必须国际化 (i18n) 一个 Django 项目。它结合了许多内部 django 应用程序。它已经部分国际化了,即一些字符串是 _(),但有些是空的。一些模板使用 {% blocktrans %}
什么是EDS和 OD ?它们是如何创建和使用的? OD 是如何介于应用程序和 CAN 之间的?界面? 最佳答案 首先你应该读一点关于CANopen的内容熟悉这些概念。检查www.canopen.de您
我正在浏览 Wikipedia/Restrict , 并发现 The compiler can e.g. rearrange the code, first loading all memory lo
我正在 Linux 中编写一个 bourne shell 脚本,我正在使用 ed 将文本附加到文件的末尾。 我必须使用 ed 来完成这项任务。 我需要附加的文字看起来像这样 Modified on:
考虑以下 IL 代码: .method public static void Main() { ldstr "Starts Here" call voi
我有这样的东西: //html Action 1 Action 1 Action 1 ...
考虑使用 malloc 定义的 (char *) 变量 sTmp, 如果我将另一个变量分配给此 sTmp,通过该变量分配的内存是否会自动释放,或者该内存块是否会保持分配(且无用)直到进程结束? 让我用
我定义了一个不透明的结构和相关的 API,如下所示: typedef struct foo foo; foo *create_foo(...); delete_foo(foo *f); 我无法在我的
使用以下伪 Python 脚本将数据发送到本地套接字: s = socket.socket(AF_UNIX, SOCK_STREAM) s.connect("./sock.sock") s.send(
我有一个正方形比例的MKMapView mainMap,它的宽度等于iPhone屏幕宽度。我使用以下方法将其设为圆形: mainMap.layer.cornerRadius = mainMap.fra
假设您要对所有包含模式的文件进行编辑。例如,将所有“2017”更改为“2018”。存在许多针对 perl、sed 和各种其他的建议。如果 ed 编辑器可以工作的话,它会简单得多。 给定一个文件: $
我在 bash 脚本中使用 ed 来搜索文件; / 命令将显示我不想要的内容。我尝试重定向 >/dev/null 2>&1 但这对我不起作用。 文本文件foo.txt: a b c bash 脚本ba
我正在研究 ed 文本编辑器。 要退出输入模式,用户应输入一个句点 (.)。 假设我想以文本形式输入句点。 我想到了一个解决方法:首先,我插入类似.. 的内容。然后,我将 .. 替换为 .. 但我的方
Rust playground : trait FnBox { fn call_box(self: Box); } impl FnBox for F { fn call_box(sel
我们有多个域指向我们的 Tomcat Web 应用程序,它们都由我们的默认 Host 提供服务: 我需要配置哪个 Valve 模式来查看请求已发送到哪个域(即用户在网络浏览器中输入了哪
我做了一个简单的test(jsbin)与: {a:1} //dummy value var a=1; 然后: alert($("#a").text()); 结果是: 但是 - 使用
我是一名优秀的程序员,十分优秀!