这张便条说:
-ansi
:告诉编译器实现ANSI语言选项.这会关闭GCC的某些与ANSI标准不兼容的"功能".
-pedantic
:与-ansi
此结合使用,这告诉编译器严格遵守ANSI标准,拒绝任何不符合的代码.
首先要做的事情:
-pedantic
和-ansi
选项的目的是什么(我无法理解上面的描述)?几个星期休息之后,我正在尝试使用David Vandevoorde和Nicolai M. Josuttis 所着的模板 - 完整指南来扩展和扩展我的模板知识,我现在想要了解的是模板的显式实例化.
我实际上并没有这样的机制问题,但我无法想象我想要或想要使用此功能的情况.如果有人能向我解释,我将不仅仅是感激.
我试图制作一个包含以下内容的DLL:
基本模板类,只有虚拟析构函数而没有属性(我称之为MatrixInterface)
带有构造函数,析构函数,运算符=和属性(矩阵类)的派生类
一个返回基类指针到新派生对象的函数:
#ifdef BUILD_DLL
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endif
template<class T>
MatrixInterface<T> DLL_EXPORT * CreateMatrixInstance(unsigned int n,unsigned int m)
{
return new matrix<T>(n,m);
}
Run Code Online (Sandbox Code Playgroud)
我想使用这个函数在我的程序中实现矩阵类,但我不能为这个函数分配一个函数指针,我不明白为什么.我可以通过这种方式加载任何不是模板函数的函数.
#include <windows.h>
#include <iostream>
using namespace std;
template<class T>
class MatrixInterface
{
public:
virtual ~MatrixInterface(void);
};
typedef MatrixInterface<int>* (*Fptr)(unsigned int,unsigned int);
int main(int argc, char* argv[])
{
Fptr p;
MatrixInterface<int> *x;
char path[]="basicmatrix.dll";
HINSTANCE hDll = LoadLibrary(path);
cout<<(char*)path<<endl;
if(hDll)
{
cout<<"Library opened succesfully!"<<endl;
p …
Run Code Online (Sandbox Code Playgroud)