小编CDZ*_*CDZ的帖子

"new operator"将另一个类实例化为工厂?

我尝试使用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)

c++ new-operator c++11

11
推荐指数
1
解决办法
1154
查看次数

cmake find_path无法按预期工作

我有以下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)

为什么?任何的想法?

cmake

7
推荐指数
1
解决办法
7532
查看次数

在 cmake 构建中使用 LLVM

我正在尝试构建我自己的使用 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)

我的脚本或我使用的软件包有问题吗?任何的想法 ?

谢谢你的帮助

cmake llvm

6
推荐指数
1
解决办法
4082
查看次数

警告C4661:没有为显式模板实例化请求提供合适的定义

我编写了一个类模板并在不同的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警告!

这是正常的吗?

c++ templates visual-c++ c++11 visual-studio-2017

4
推荐指数
1
解决办法
3097
查看次数

使用cmake和nmake x64

我使用cmake生成一个NMake文件,一切都很顺利.

我使用的是x64工具集(没有Visual Studio,只有SDK),因此我键入了nmake,但它生成的是x86版本,而不是x64版本.

你知道为什么吗 ?以及如何强制nmake定位x64?

谢谢

64-bit nmake cmake

4
推荐指数
1
解决办法
1438
查看次数

cmake-支持Visual Studio过滤器

我有一个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++ visual-studio visual-studio-2017

2
推荐指数
1
解决办法
878
查看次数