为什么Microsoft的C++/CLI不允许我通过引用传递字符串?我收到以下错误:
C3699:'&':不能在类型'System :: String'上使用此间接
我试图找到一种方法来减少一些语法"噪音"而不诉诸宏.对于以下代码:
struct base { base() = delete; };
struct tag1 final : private base
{
static constexpr const char* name = "tag1";
};
template <typename T> std::string name() { return T::name; }
// ...
int main()
{
const std::string name1(name<tag1>());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这将是很好摆脱的一些static constexpr const char*(更不用提其他)语法,因为它很烦人的重复,对tag2,tag3等等.另外,所有的这是非常有趣的是唯一的一部分tag1,其余的是"噪声".直接的解决方案是使用宏:
#define MAKE_TAG(tag_name) struct tag_name final : private base { \
static constexpr const char* name = #tag_name; }
MAKE_TAG(tag2);
// ...
const std::string …Run Code Online (Sandbox Code Playgroud) 在 cmake 项目中包含外部库通常使用find_package().
但是在一个大型的多应用程序/多库项目中,一些 3rd 方和/或系统库被多个应用程序和库使用是很典型的。
应该在哪里find_package()调用这些公共库?
CMakeLists.txt每个需要它们的可执行文件/库的文件中?CMakeLists.txt文件中?第一个选项似乎是一种更模块化的方法,但是find_package()为使用它们的每个库/可执行文件执行关联的脚本。这会减慢配置步骤。
第二个选项更有效,但对我来说看起来有点像全局变量。
我正在尝试Rcpp在运行时调试已编译的代码。很长一段时间以来,我一直试图让它无法成功地工作。这里问了一个非常相似的问题: Debugging (line by line) of Rcpp-generated DLL under Windows这提出了同样的问题,但问题和答案都远远超出了我的理解。
这是我所拥有的:
Windows 7 Pro SP1
R 3.5
Rstudio 1.1.463 with Rcpp.
Rbuild Tools from Rstudio. (c++ compiler)
Run Code Online (Sandbox Code Playgroud)
过程:在 Rstudio File->New File->C++ File(创建一个带有 timesTwo 函数的示例文件。)
我在这个文件中添加了一个新函数:
// [[Rcpp::export]]
NumericVector timesTwo2(NumericVector x) {
for(int ii = 0; ii <= x.size(); ii++)
{
x.at(ii) = x.at(ii) * 2;
}
return x;
}
Run Code Online (Sandbox Code Playgroud)
我在 Save 上检查了 Source 并将文件保存为 RcppTest.cpp ,它成功地获取或编译了文件。
在 Rstudio 中运行代码:
data = c(1:10)
data
[1] 1 2 3 …Run Code Online (Sandbox Code Playgroud) 我正在尝试构建 google-benchmark 并使用 cmake 将它与我的库一起使用。我已经成功构建了 google-benchmark 并使用 cmake 成功运行了所有测试。不幸的是,我无法使用 cmake 或 cl 在 windows 中将它与我的 c++ 代码正确链接。
我认为的问题是 google-benchmark 在 src 文件夹中构建库,即它构建在 src/Release/benchmark.lib 现在我不能在 cmake 中指向它,如果我使用 ${benchmark_LIBRARIES} 它在src 外的 Release 文件夹,因为这是构建所有库的常用位置。并且很难找到在 Windows 中工作的示例。
这是我尝试过的两种方法,都可以构建库并运行所有测试,但我无法正确地将库指向 target_link_library
include(ExternalProject)
ExternalProject_Add(googlebenchmark
GIT_REPOSITORY https://github.com/google/benchmark.git
GIT_TAG master
SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/googlebenchmark-src"
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/googlebenchmark-build"
CONFIGURE_COMMAND ${CMAKE_COMMAND} -B ${CMAKE_CURRENT_BINARY_DIR}/googlebenchmark-build -S ${CMAKE_CURRENT_BINARY_DIR}/googlebenchmark-src -DBENCHMARK_DOWNLOAD_DEPENDENCIES=ON
BUILD_COMMAND ${CMAKE_COMMAND} --build ${CMAKE_CURRENT_BINARY_DIR}/googlebenchmark-build --config Release
INSTALL_COMMAND ""
TEST_COMMAND ${CMAKE_CTEST_COMMAND} ${CMAKE_CURRENT_BINARY_DIR}/googlebenchmark-src ${CMAKE_CURRENT_BINARY_DIR}/googlebenchmark-build --build-config Release
)
Run Code Online (Sandbox Code Playgroud)
和
ExternalProject_Add(googlebenchmark
GIT_REPOSITORY https://github.com/google/benchmark.git
GIT_TAG master
PREFIX googlebenchmark
CMAKE_ARGS -DBENCHMARK_DOWNLOAD_DEPENDENCIES=ON
BUILD_COMMAND ${CMAKE_COMMAND} --build …Run Code Online (Sandbox Code Playgroud) 我用 C++ 和 wxwidgets 创建我的第一个程序。当我尝试编译该项目时出现错误。
LNK2019 unresolved external symbol _main referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)
LNK1120 1 unresolved externals
Run Code Online (Sandbox Code Playgroud)
我已经在 Visual Studio 中自行编译了 wxwidgets。
编译后,我在 Visual Studio 中创建了一个新的 C++ 空项目。
我进入配置并添加了包含目录:
配置属性 -> C/C++ -> 常规 -> 其他包含目录:
C:\Users\user\source\repos\wxWidgets\include; C:\Users\user\source\repos\wxWidgets\include\msvc
配置属性 -> 链接器 -> 其他库目录:
C:\Users\user\source\repos\wxWidgets\lib\vc_lib
然后我添加了 2 个类,cApp 和 cMain。
cApp.h
#pragma once
#include "wx/wx.h"
#include "cMain.h"
class cApp : public wxApp
{
public:
cApp();
~cApp();
private:
cMain* m_frame1 = nullptr;
public:
virtual bool OnInit();
};
Run Code Online (Sandbox Code Playgroud)
cApp.cpp …
我正在尝试用 C++ 为我的游戏引擎创建 C# 事件。我现在正在实现事件系统,但我不知道如何删除向量中的 std::function。我是否使用了正确的列表?
我是 C++ 的新手,但我现在是 10 年的 C# 程序员。这在 C++ 中可能吗?
#include <algorithm>
#include <functional>
#include <iostream>
#include <vector>
struct Delegate {
std::vector<std::function<void()>> funcs;
template<class T> void operator+=(T mFunc)
{
funcs.push_back(mFunc);
}
template<class T> void operator-=(T mFunc)
{
// How?
//funcs.erase(std::remove(funcs.begin(), funcs.end(), mFunc), funcs.end());
}
void operator()() {
for (auto& f : funcs) f();
}
};
void fun1()
{
std::cout << "hello, ";
}
void fun2()
{
std::cout << "Delete";
}
void fun3()
{
std::cout << …Run Code Online (Sandbox Code Playgroud) 我正在重写我上学期为大学开发的光线追踪器,但遇到了以下问题:当我在 Debug 中编译和运行我的代码时,输出符合预期
但是当我启用更高的优化级别(例如“-O2”)时,结果会完全不同:
我不确定为什么会发生这种情况。我追踪到球体相交代码
//#pragma GCC push_options
//#pragma GCC optimize("O0")
Intersection Sphere::intersect(const Ray& ray, const float previous) const
{
const auto oc = ray.origin - center_;
const auto lhv = -dot(ray.direction, oc);
const auto discriminant = lhv * lhv - (oc.lensqr() - radius_ * radius_);
if (discriminant < 0.0F)
{
return Intersection::failure();
}
float distance;
const auto rhv = std::sqrt(discriminant);
const auto r = std::minmax(lhv + rhv, lhv - rhv);
if (r.first <= 0.0F)
{
if (r.second <= 0.0F) …Run Code Online (Sandbox Code Playgroud) 我正在尝试为 python 3.9.2(32 位)安装 pyodbc,但是我不断收到错误:
C:\ Users \ ICAPP02 \ AppData \ Local \ Temp \ pip-install-0c78okb8 \ pyodbc_d782ffa5512448c49f83e214e7ec4434 \ src \ pyodbc.h(19):致命错误C1083:无法打开包含文件:'windows.h':没有这样的文件或目录错误:命令“C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29910\bin\HostX86\x86\cl.exe”失败,退出代码为 2
我知道我丢失了 windows.h C++ 头文件,但我真的找不到它们,不再知道在哪里查找,不知道丢失了多少个,也不知道它们是什么样子。
另外,当我找到它们时,是否将它们放在错误中引用的文件夹中?:C:\Program Files (x86)\Microsoft VisualStudio\2019\Community\VC\Tools\MSVC\14.28.29910\bin\ HostX86\x86\cl.exe
我使用 vcpkg 作为我的 Visual C++ 项目的库管理器。有时我动态链接库并vcpkg在文件夹中提供 dll \vcpkg\installed\x64-windows\bin。当我在Debug或Release模式下运行项目时,出现与缺少 DLL 相关的错误。组织 Visual C++ 从vcpkg文件夹中获取 dll 的优雅方法是什么?