小编ein*_*ica的帖子

Ecplise CDT 的索引器是否仅限于源和标题的常见文件类型?

我正在处理一个涉及 TOM 文件(.t 扩展名)的项目,这些文件被编译成 .c 文件。现在,我已经告诉我的 Eclipse 将它们视为 C 源文件,但是 CDT 索引器似乎不想接触它们。是否可以告诉它考虑其他文件类型?

注意:TOM 文件看起来就像 C 文件,但有一些额外的语法,这对于索引器来说就像某些行上的语法错误。

file-extension indexer eclipse-cdt tom

3
推荐指数
1
解决办法
607
查看次数

链接模板模板参数 - 将内部参数约束为相同

我有一些代码大量使用模板类.此时可能但不希望更改现有代码库.我需要编写一个新的类,它将作用于两个模板类(为了这个问题的目的)是任意的,除了有一个共同的模板参数.一个简化的例子:

template<typename T>
class A {
    // Implementation details
};

template<typename T>
class B {
    // Implementation details
};

template<typename T, typename X<T>, typename Y<T>> // This syntax is invalid!
class C {
    // Implementation details
};
Run Code Online (Sandbox Code Playgroud)

我需要写课C.示例中显示的语法暗示了我想要做什么但不起作用.模板参数XY这里必须通过采用相同的模板参数"捆绑在一起" T.除此之外,它们可以是任意的.

这意味着"喜欢"的东西C<std::string,A<std::string>,B<std::string>>应该是有效的,但C<std::string,A<std::string>,B<std::map>>不应该因为A并且B没有相同的模板参数.(引号中的"like"再次表示语法在C上面的声明中仍然是错误的.)

其他尝试(也失败了)包括:

  • template<typename T, template<typename> class X<T>, template<typename> class Y<T>>
  • template<typename T> template<typename X<T>, typename Y<T>>

有可能这样吗?如果是这样,语法是什么?

谢谢!

c++ templates class

3
推荐指数
1
解决办法
53
查看次数

使用C++ 14/17时,哪些宏用途仍然是不可避免的?

在C++中,许多开发人员(甚至可能是我们大多数人)不喜欢宏,并试图避免使用正确的语言结构.并且 - 似乎语言也倾向于鼓励这一点.渐渐地,我们已经能够在很多情况下摆脱宏观使用:

  • 类型多态 - >模板编程
  • 条件编译 - >模板参数的编译时评估,SFINAE等
  • #include警卫 - > #pragma once对于一些编译器,虽然我猜你不能相信; 很快我们应该有C++ 17模块而import不是include.

我的问题是 - 还剩下什么?什么样的宏观使用是完全不可避免的,或者是非常痛苦的避免?我能想到的主要例子是:

我错过了宏的其他重要用途?(请不要超级特殊的角落情况.)

c++ macros idioms c++17

3
推荐指数
1
解决办法
307
查看次数

如何根据条件推断可以返回类型的函数的类型?

我有一个模板函数,它接受两种数据类型 - int和double并返回一个较小的数据,现在,我如何推断出这个函数返回的类型?现在,我正在丢失小数点后的部分.

#include <iostream>

using namespace std;

template <class First, class Second>
First smaller(First a, Second b){
   return (a < b ? a : b);
}

int main () {
   int x = 100;
   double y = 15.5;
   cout<< smaller (x,y) << endl;

}
Run Code Online (Sandbox Code Playgroud)

c++ templates casting c++11

3
推荐指数
1
解决办法
128
查看次数

如何在 CUDA C++ 代码中使用“red”和“atom”PTX 指令?

CUDA PTX 指南描述了指令“atom”和“red”,它们执行原子和非原子归约。这对我来说是新闻(至少对于非原子归约而言)...我记得不久前学习过如何使用 SHFL 进行归约。这些指令是否以某种方式反映或包装在 CUDA 运行时 API 中?或者使用 C++ 代码访问而无需实际编写 PTX 代码的其他方式?

c++ cuda atomic instruction-set ptx

3
推荐指数
1
解决办法
695
查看次数

用于扩展任意宏一定次数的宏?

我想编写C宏,它接受一个整数文字或类似于整数文字的东西,以及另一个宏的名称,并将该其他宏扩展为整数字面值的多倍,索引作为参数,例如

MAGIC(4, FUN)
Run Code Online (Sandbox Code Playgroud)

扩展到

FUN(0) FUN(1) FUN(2) FUN(3)
Run Code Online (Sandbox Code Playgroud)

相反,如果我的MORE_MAGIC需要一个范围的起点和长度,那就更好了:

例如

MORE_MAGIC(1, 3, FUN)
Run Code Online (Sandbox Code Playgroud)

扩展到

FUN(1) FUN(2) FUN(3)
Run Code Online (Sandbox Code Playgroud)

注意:

  • 我可以忍受扩展的数量,我不知道,99或50,或类似的东西.
  • 你不能对FUN做出假设.需要是通用的.不,这不是手动展开循环.
  • C-only解决方案是最受欢迎的以及需要C++的解决方案(例如,如果您以某种方式在解决方案中使用模板).
  • 解决方案的总行数(包括#include但不包括注释)最好是适度的.说,不超过200.

c c++ macros metaprogramming

3
推荐指数
1
解决办法
133
查看次数

是否有可能CUDA的memcpy(dst,src,0)写入*dst?

我有一些调用的内核代码memcpy(my_dst, my_src, my_num_bytes)- 有时我my_num_bytes等于0.奇怪的是,一些零星的实验(使用Titan X,CUDA 7.5,驱动程序358.16)表明,当我这样的调用时,数据会被写入目的地.

  1. 你在CUDA中遇到过这种行为吗?
  2. 这是指定的吗?节目指南条目memcpy() 不说.

cuda memcpy invalid-argument

3
推荐指数
1
解决办法
139
查看次数

OpenCL 2.x管道 - 它们实际上如何工作?

我已经阅读了OpenCL 2.x管道API的这个描述,并通过khronos.org上的Pipe API页面引导.我觉得有点嫉妒,几乎完全在CUDA工作,这个漂亮的功能仅在OpenCL中可用(并且抱歉CUDA功能未被OpenCL正确包含,但这是一个不同的问题),所以我想我会问"如何来CUDA没有管道机制".但后来我意识到我甚至都不知道那究竟是什么意思.所以,相反,我会问:

  1. OpenCL管道如何在AMD独立GPU/APU上运行?...

    • 什么信息写在哪里?
    • 如何通过使用管道来实现内核工作组到核心的调度?
    • 管道内核是否被编译在一起(例如,他们的SPIR表单)?
    • 管道的使用是否允许通过特定于核心的高速缓存在不同内核之间传递数据(OpenCL用语中的"本地存储器",CUDA用语中的"共享存储器")?那将是真棒.
  2. 有没有一种方法管道"应该"在GPU上工作?即API作者设想甚至是书面形式的东西?
  3. OpenCL管道如何在基于CPU的OpenCL实现中工作?

pipeline gpgpu opencl opencl-pipes

3
推荐指数
1
解决办法
1535
查看次数

使用CUDA 8.0和GCC 6.x - 错误的功能超载投诉

我正在尝试使用GCC 6.2.1构建一些CUDA代码,这是我的发行版的默认编译器(注意:不是CUDA正式支持的GCC版本,所以你可以称之为实验).这是使用GCC 4.9.3和CUDA版本7.5和8.0构建的代码.

好吧,如果我构建以下(接近)最小的示例:

#include <tuple>

int main() { return 0; }
Run Code Online (Sandbox Code Playgroud)

使用命令行

nvcc -std=c++11 -Wno-deprecated-gpu-targets -o main main.cu
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

/usr/local/cuda/bin/../targets/x86_64-linux/include/math_functions.h(8897): error: cannot overload functions distinguished by return type alone

/usr/local/cuda/bin/../targets/x86_64-linux/include/math_functions.h(8901): error: cannot overload functions distinguished by return type alone

2 errors detected in the compilation of "/tmp/tmpxft_000071fe_00000000-9_b.cpp1.ii".
Run Code Online (Sandbox Code Playgroud)

这是为什么?我该如何纠正/规避这个?

compatibility cuda g++ libstdc++ gcc6

3
推荐指数
1
解决办法
4099
查看次数

为什么编译器在某些情况下只能隐式地将char*转换为std :: string

这些工作:

struct WithString {
  WithString(std::string){};
};

void takeString(std::string){}

//implicit conversions:
takeString("hello");
WithString("hello");
Run Code Online (Sandbox Code Playgroud)

但这不是:

WithString makeWithString() { return "hello";}

// error: no viable conversion from returned value of type 'const char [6]'...
Run Code Online (Sandbox Code Playgroud)

如果std::string在前两种情况下隐式转换为"hello" ,为什么不能在最后一种情况下呢?请注意,我没有将WithString构造函数指定为explicit,所以我希望这样的转换.

通过这样做,我可以让行为起作用:

struct WithString {
  WithString(std::string){};
  WithString(const char *){};
};
Run Code Online (Sandbox Code Playgroud)

我只是对这种奇怪感到好奇.如果我假定一个猜测,我会说这是因为前两个工作的情况下,转换之间const char *std::string,但在错误的情况下,这反而会需要2转换链,首先从const char *std::string,然后从std::stringWithString.也许这就是原因,但我不确定.

c++ stdstring object-construction implicit-conversion char-pointer

3
推荐指数
1
解决办法
485
查看次数