我尝试使用new运算符来实例化特定的类,而不是new关键字后面的类.
我尝试为抽象类提供一种"工厂".
在我看来,这是不可能的,但让我们仔细检查!这段代码编译,但主代码将其视为Test(而不是TestImpl类)
class Test
{
public:
virtual int testCall() { return 0; };
static void* operator new(std::size_t);
};
class TestImpl : public Test
{
virtual int testCall() override
{
return i;
}
int i = 15;
};
void* Test::operator new(size_t sz)
{
return ::new TestImpl();
}
void main()
{
Test * t = new Test(); // Call the new operator, correctly
int i = test->testCall(); // i == 0 and not …Run Code Online (Sandbox Code Playgroud) 我有以下CMake脚本,它的工作原理:
find_path(
GLES_SDK_INCLUDE_DIR
NAMES "GLES2/gl2.h"
PATHS "${CMAKE_FRAMEWORK_PATH}/include")
Run Code Online (Sandbox Code Playgroud)
但是这个回归-NOTFOUND:
find_path(
GLES_SDK_INCLUDE_DIR
NAMES "gl2.h"
PATHS "${CMAKE_FRAMEWORK_PATH}/include/GLES2")
Run Code Online (Sandbox Code Playgroud)
为什么?任何的想法?
我正在尝试构建我自己的使用 LLVM 的项目。我在官网(最新版本)下载了源代码和预编译包。
http://releases.llvm.org/download.html
Run Code Online (Sandbox Code Playgroud)
我下载了 :
LLVM source code
Clang for Windows (64-bit)
Run Code Online (Sandbox Code Playgroud)
仅供参考,我不构建 LLVM ......只想使用它!
我按照这里的说明进行操作:http : //llvm.org/docs/CMake.html#embedding-llvm-in-your-project
在以下部分中:“在您的项目中嵌入 LLVM”
所以,我添加了这个代码:
find_package(LLVM REQUIRED CONFIG)
message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")
message("LLVM_INCLUDE_DIRS=${LLVM_INCLUDE_DIRS}")
message("LLVM_DEFINITIONS=${LLVM_DEFINITIONS}")
Run Code Online (Sandbox Code Playgroud)
但是我收到了几条 cmake 错误消息,这是我的输出:
-- Using LLVMConfig.cmake in: C:\\Luciad_src\\libs\\LLVM\\cmake\\modules
LLVM_INCLUDE_DIRS=
LLVM_DEFINITIONS=
CMake Error at C:/Luciad_src/libs/LLVM/cmake/modules/LLVM-Config.cmake:31 (list):
list sub-command REMOVE_ITEM requires two or more arguments.
Call Stack (most recent call first):
C:/Luciad_src/libs/LLVM/cmake/modules/LLVM-Config.cmake:256 (is_llvm_target_library)
components/query/CMakeLists.txt:15 (llvm_map_components_to_libnames)
Run Code Online (Sandbox Code Playgroud)
我的脚本或我使用的软件包有问题吗?任何的想法 ?
谢谢你的帮助
我编写了一个类模板并在不同的DLL中使用它,所以希望隐藏实现的某些部分.
为此,我使用"模板实例化",但导出它,像这样,这里是头文件:
#include <iostream>
#include <exception>
using namespace std;
template<typename T>
class __declspec(dllexport) Templated
{
public:
Templated();
};
template __declspec(dllexport) Templated<int>;
int main()
{
cout << "Hello World" << endl;
}
Run Code Online (Sandbox Code Playgroud)
并且定义在一个单独的文件中(.cpp)
template<typename T>
Templated<T>::Templated() {}
template Templated<int>;
Run Code Online (Sandbox Code Playgroud)
我的问题是我收到了警告,即使实例化被标记为已导出!
您可以在此处测试此代码:http://webcompiler.cloudapp.net/,它将生成C4661警告!
这是正常的吗?
我使用cmake生成一个NMake文件,一切都很顺利.
我使用的是x64工具集(没有Visual Studio,只有SDK),因此我键入了nmake,但它生成的是x86版本,而不是x64版本.
你知道为什么吗 ?以及如何强制nmake定位x64?
谢谢
我有一个cmake文件,该文件可以生成包含多个子项目的解决方案,但我希望有一个“过滤器”(VS特定功能)将所有第三方库组合在一起。
一个例子,现在我使用ZLIB库,它作为一个项目出现,我使用以下代码:
add_subdirectory(zlib)
Run Code Online (Sandbox Code Playgroud)
要添加这样的过滤器,我可以尝试以下方法:
add_subdirectory(zlib)
FILE(GLOB_RECURSE ZLIB_SOURCE "zlib/*")
SOURCE_GROUP("THIRDPARTY" FILES ${ZLIB_SOURCE})
Run Code Online (Sandbox Code Playgroud)
在此示例中,我希望将“ zlib”项目放入“ THIRDPARTY”过滤器中。
但是我的解决方案没有任何改变!我使用VS2017和cmake 3.8
任何的想法 ?
c++ ×3
cmake ×3
c++11 ×2
64-bit ×1
llvm ×1
new-operator ×1
nmake ×1
templates ×1
visual-c++ ×1