我正在运行一个类似于我在这里找到的简单程序.这意味着在多个文件中包含常量时减少代码膨胀.它通过在命名空间中使用const全局变量及其各自的extern前向声明来实现此目的.
globals.h
#ifndef GLOBALS_H_
#define GLOBALS_H_
namespace Constants
{
// forward declarations only
extern const double pi;
extern const double avogadro;
extern const double my_gravity;
}
#endif
Run Code Online (Sandbox Code Playgroud)
globals.cpp
namespace Constants
{
// actual global variables
extern const double pi(3.14159);
extern const double avogadro(6.0221413e23);
extern const double my_gravity(9.2); // m/s^2 -- gravity is light on this planet
}
Run Code Online (Sandbox Code Playgroud)
source.cpp
#include <iostream>
#include <limits>
#include "globals.h"
int main()
{
double value_of_pi = Constants::pi;
std::cout << value_of_pi;
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), …Run Code Online (Sandbox Code Playgroud) 我正在尝试将JintArray从C++返回到Java,但应用程序似乎挂在JNI调用中.虽然我没有收到任何错误,但我已将问题解决了jintArray的创建和填充问题.任何帮助表示赞赏.
测试项目以确保一切正常:
include "stdafx.h"
include "windows.h"
include <vector>
include <iostream>
include <jni.h>
using namespace std;
std::vector<jint> childWindows;
BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam) {
childWindows.push_back((jint) hwnd);
return TRUE;
}
jint* getChildWindows(HWND hWnd) {
childWindows.clear();
::EnumChildWindows(hWnd, EnumChildProc, NULL);
int len = static_cast<int>(childWindows.size());
jint values[100];
std::copy(childWindows.begin(), childWindows.end(), values);
for (std::vector<jint>::const_iterator i = childWindows.begin(); i != childWindows.end(); ++i) {
std::cout << (HWND)*i << ' ';
}
//env->SetIntArrayRegion(childeren, 0, len, values);
return values;
}
int _tmain(int argc, _TCHAR* argv[])
{
getChildWindows((HWND)1377258);
std::cout << " …Run Code Online (Sandbox Code Playgroud) 我们构建了两个静态库,让我们称之为LibA和LibB.
在Visual Studio中,我使用projectA和projectB设置了一个解决方案,这样对于projectB,Configuration Properties -> Librarian -> General -> Additional Dependencies我已经添加了LibA.这使得VS将LibA合并到生成的LibB中.这样做是因为我们不想更改我们向客户提供的静态库.
现在,LibA和LibB都是用"程序数据库"作为调试信息格式构建的,一旦我将LibB链接到最终二进制文件,我就会收到没有找到LibA.pdb的警告.这让我相信来自LibA的调试信息没有被合并到LibB中,所以我想自己这样做.虽然,我找不到任何这样做的工具.如果可能的话,我宁愿不发送额外的文件.
我想到的一种解决方法,但尚未尝试,将使用'C7兼容'作为调试信息格式构建LibA.希望Visual Studio足够聪明,可以提取该信息并将其添加到为LibB创建的pdb中.
所以我们假设我有一个50个文件模块,每个模块包含:
export class <SomeClassName> { /* content */ }
然后,我创建一个根文件,通过重新导出所有文件来简化使用.所以它看起来像:
export * from "./src/some-class-1";
export * from "./src/some-class-2";
export * from "./src/some-class-3";
// etc
Run Code Online (Sandbox Code Playgroud)
然后,我通过TSC运行它来执行一个"常用"模块,目标是"es5",带有描述符输出.
到现在为止还挺好.我有我package.json的名字my-module目标输出index.js作为我的模块的入口点.所以我现在决定在另一个打字稿项目中使用这个模块.
所以我为它做了npm安装(让我们假装)npm install my-module并且它全部拉入,所以我现在有生成的d.ts文件,我有实际的commonjs模块,所以我可以使用它.一切似乎都很好.
然后是问题所在.然后我决定使用该模块:
import {SomeClass1} from 'my-module'
它在TS世界中爆炸,它不知道与什么my-module有关,好像我们回去看看输出的index.js,它不包含环境模块.
所以这就是问题,通用模块通常在包含模块名称时使用package.json作为参考点,但是TS使用d.ts文件.所以我认为好吧,我需要将我的重新导出包装index.ts在一个模块中,所以我尝试:
export module "my-module" { /* all other re-exports */ }
但事实证明,您只能为环境模块使用字符串模块名称,并且您只能将它们放在d.ts文件中,但是我的d.ts文件是从现有代码库生成的.
所以这是我的困境,我可以手动进入并declare module "my-module为我的d.ts 添加一个包装器,但它不是非常自动化,或者我喜欢使用ES6语法的博客文章做并相对引用文件最终会有很多import {blah} from "../node_modules/my-module/dist/index"希望我们都同意的是有点傻.
所以我找不到任何其他可以在自动化世界中工作的方法,因为当你使用ES6语法时,关于这个主题的所有博客文章和文档都使用相对文件导入,而不是从整个事物编译和共享时的导入通过d.ts文件.
那么有没有办法将我的再出口包装在文本模块名称中?或者至少告诉index.d.ts包含环境模块?(记住它会为项目中的每个文件输出一个d.ts文件,但我们只关心通过index.d.ts导入模块,因为它会重新导出所有内容).
我想我在JavaScript方面缺少一些代码.我正在为每个请求下载文档.当用户点击链接时,我会获取文档数据并将其流式传输.我在Fiddler上看到数据正在关闭,但.txt文档链接没有打开.
[HttpGet]
public HttpResponseMessage GetDataFiles(Int64 Id)
{
var results = context.PT_MVC_RequestFile.Where(x => x.RowId == Id).FirstOrDefault();
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
try
{
if (results != null)
{
response.Headers.AcceptRanges.Add("bytes");
response.StatusCode = HttpStatusCode.OK;
response.Content = new ByteArrayContent(results.Data);
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
response.Content.Headers.ContentDisposition.FileName = results.FileName;
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
response.Content.Headers.ContentLength = results.Data.Length;
}
}
catch (EntityException ex)
{
throw new EntityException("GetFiles Failed" + ex.Message);
}
return response;
}
Run Code Online (Sandbox Code Playgroud)
首先,我下载了该请求的所有文档,如果用户点击该文件,我会调用下载流操作.
$.ajax({
url: url,
type: 'GET',
// data: JSON.stringify(model, null),
contentType: "application/json",
success: function (data) …Run Code Online (Sandbox Code Playgroud) 我有一个使用 OpenCV 的 C++ 项目。我正在创建一个 CMakeLists.txt 文件来帮助人们编译它,并且一切正常。
简而言之:如何使用 CMake 创建一个 makefile 以使用 NVCC 将“.cu”文件编译为“.o”并将其与其余“.o”文件链接?
长版本:我想添加一个必须使用 NVCC 编译的 CUDA 文件。我设法手动编译它,但我不知道如何使用 CMake 创建 makefile 来执行此操作:
现在,我有这样的事情:
IF(CUDA_FOUND)
MESSAGE( STATUS "I found CUDA !" )
SET(HAVE_CUDA ${CUDA_FOUND} CACHE BOOL "Set to TRUE if CUDA is found, FALSE otherwise")
cuda_compile(CudaKernel CudaKernels.cu)
ENDIF(CUDA_FOUND)
Run Code Online (Sandbox Code Playgroud)
这会创建一个 .o 文件,但我不知道在哪里/如何使用它。
然后我计划添加一个标志,例如:
if(HAVE_CUDA)
set (CMAKE_CXX_FLAGS "-DGPU_OPENCV_ENABLE=1")
endif(HAVE_CUDA)
Run Code Online (Sandbox Code Playgroud)
并在我的 C++ 代码中的宏中测试该标志以调用良好的函数。
任何想法?
我遇到了有关预编译标头和#include指令的用法的理解问题。所以我在这里得到了“ stdafx.h”,并在其中包含了例如vector,iostream和string。显然,关联的“ stdafx.cpp”仅包含“ stdafx.h”。
因此,如果我设计自己的头文件使用例如vector或iostream中的“代码”,则必须包含头文件,因为编译器当时不知道声明。那么,为什么这里的某些帖子(在头文件或源文件中包含stdafx.h?)说,即使该文件包含了所需的例如vector的声明,在其他头文件中包含“ stdafx.h”也是不好的吗?因此,基本上没有关系直接包含向量或预编译的头文件都一样。
我当然知道,如果关联的源文件包含所需的头文件,则不必在另一个头文件中包含头文件,因为那时声明是已知的。好吧,这仅在头文件包含在某处的情况下才有效。
所以我的问题是:我应该避免在任何源文件中包含预编译的头文件,为什么?我有点困惑,因为我在网上阅读矛盾的表达,我无论如何都不应该在头文件中包含任何内容,或者可以在头文件中包含它吗?那现在怎么了?
如果有人可以帮助我,我完全没有想法.
所以我有这个代码(这是我的代码的一个非常简化的版本):
while(readNewFile())
{
while(getNewStructFromFile())
{
unsigned long starttime = GetTickCount();
customerData.fillFromBinaryData(structPointer);
cout<< GetTickCount() - starttime;
aMap.insert(pair<int,string>(customerData.phoneNumber,""));
}
// Ouptut all data
aMap.clear();
}
Run Code Online (Sandbox Code Playgroud)
基本上,它只是从二进制文件中读取记录.customerData得到数据并用来自它的数据填充变量.然后,它将电话号码插入到地图中(为了调试我实际上只是插入一个int和一个空字符串).
问题是,一段时间后这个程序变得很慢; 如果我注释掉地图插入程序运行正常没有问题,每个文件的执行时间是恒定的.如果我使用地图插入,在几个文件之后,程序再次变得非常慢(从8-10秒到1分钟或更长).但调试时GetTickCount(),它告诉我延迟发生在customerData.fillFromBinaryData(最初0ms,然后它跳到30-40毫秒(填写类变量)).但是,如果我评论这个简单的地图插入,用数据填充对象没有延迟!那逻辑在哪里?有人可以给我一个提示,我是出于想法.对不起,如果这个问题不是很好的话.
我尝试了不同类型的地图,但同样,它告诉我延迟不在地图插入中.
编辑/可能解决方案:
如果有人有类似的问题,我安装了VS2015,使用地图的延迟消失了!我不确定这是如何相关的,但华友世纪!
我有一个QObject财产声明为:
Q_PROPERTY( QList< int > keys READ getKeys NOTIFY keysChanged )\nRun Code Online (Sandbox Code Playgroud)\n\n在文档中指出:
\n\n\n\n\nQML 中以 JavaScript 数组类型的形式透明地支持某些 C++ 序列类型。
\n\n特别是,QML 目前支持:
\n\n\n
\n\n- QList<int>
\n...
\n
但是,当我使用此属性来驱动Repeater模型时:
QtObject {\n id: d_\n property var keys: base.proxy.keys // A binding to the C++ keys property\n onKeysChanged: {\n ...\n }\n}\n\nColumn {\n spacing: 4\n\n Repeater {\n id: repeater\n model: d_.keys\n delegate: Rectangle {\n height: 24\n width: 24\n color: "red"\n }\n …Run Code Online (Sandbox Code Playgroud) 我试图使用C++和OpenCV将脑肿瘤的MRI图像分类为良性和恶性.我计划在使用kmeans聚类SIFT描述符后使用词袋(BoW)方法.意思是,我将每个图像表示为直方图,其中包含x轴的整个"代码簿"/字典及其在y轴图像中的出现次数.这些直方图将成为我的SVM(带RBF内核)分类器的输入.
然而,使用BoW的缺点是它忽略了图像中描述符的空间信息.有人建议使用SPM代替.我读到了它并遇到了这个链接,给出了以下步骤:
- 计算来自训练集的K个视觉单词,并将所有局部特征映射到其视觉单词.
- 对于每个图像,将K个多分辨率坐标直方图初始化为零.每个坐标直方图由L个级别组成,并且每个级别i具有4 ^ i个单元,其均匀地划分当前图像.
- 对于该图像中的每个局部特征(假设其可视字ID为k),选取第k个坐标直方图,然后根据局部坐标对该直方图中的每个L对应单元格累计一个计数.特征.L单元是局部特征以L个不同分辨率落入的单元.
- 连接K个多分辨率坐标直方图以形成图像的最终"长"直方图.当连接时,第k个直方图由第k个视觉词的概率加权.
- 要计算两个图像上的核值,请将"长"直方图的交集的所有单元格相加.
现在,我有以下问题:
有人请帮助这个可怜的小本科生.如果你这样做,你将永远感激我.如果您有任何澄清,请不要犹豫.
c++ ×8
javascript ×2
opencv ×2
c# ×1
cmake ×1
const ×1
cuda ×1
dictionary ×1
extern ×1
include ×1
java ×1
jquery ×1
namespaces ×1
pdb-files ×1
performance ×1
qml ×1
qt ×1
tsc ×1
typescript ×1