小编Cle*_*rer的帖子

c ++/cli caret ^ Vs. 指针*?

我已经在C和C#中编程了很长时间,我觉得转向C++会很顺利......
无论如何,我看过使用插入符号,但我不明白它的含义.

有什么不同:

std::string *st1;
Run Code Online (Sandbox Code Playgroud)

String::string ^st2;
Run Code Online (Sandbox Code Playgroud)

谢谢!

pointers c++-cli

12
推荐指数
1
解决办法
6253
查看次数

使用#pragma一次有什么危险?

现代C和C++编译器支持非标准的#pragma once预处理器指令,它与经典的头部保护器具有类似的用途:

#ifndef hopefully_unique_identifier_that_doesnt_hurt_the_code
#define hopefully_unique_identifier_that_doesnt_hurt_the_code
  // some code here
#endif
Run Code Online (Sandbox Code Playgroud)

一个问题,我知道,使用经典的方法是,一旦你包含一个标题,你必须#undef使用标题保护宏再次包含它(这样做,对我来说,是一个主要的代码气味,但那是除此之外).该方法也出现了同样的问题#pragma once,但没有允许多次包含标题的可能性.

经典方法的另一个问题是,您可能会意外地在不相关的位置定义相同的宏,因此要么不包括预期的标题,要么做一些其他令人讨厌的东西,这是我无法想象的.这在实践中相当容易避免,通过遵守某些约定,例如将宏基于类似UUID的对象(即随机字符串)或(不太理想的方法),基于文件的名称,它们在.

在现实生活中,我很少遇到任何这些潜在问题,所以我并不认为它们是主要问题.

我能想到的唯一潜在的现实生活问题#pragma once是,它不是一个标准的东西 - 你依赖的东西可能无处不在,即使它存在,在实践中,无处不在(*).

那么,#pragma once除了我已经提到过的问题之外,还有哪些潜在的问题?我是否过于相信在实践中,无处不在?

(*)只有少数人使用的一些次要编译器,被排除在外.

c c++ macros

6
推荐指数
3
解决办法
3038
查看次数

如何使用 bazel 从同一组输入文件生成多个文件

我有一个简单的项目,它使用SWIG使一个小型 C++ 库可用于 C#。C++ 部分是单一源代码和单一头文件——此外还有一个 SWIG 接口文件。SWIG 的输出包含 5 个 C# 源文件和 1 个 C++ 源文件。

这样做make相当简单,但我在理解 bazel 时遇到了一些问题。

我如何告诉 bazel 这 6 个文件都是使用同一个命令生成的?另外,当我这样做时,我该如何告诉 bazel 实际调用该命令。

我最终感兴趣的最终产品是一个 .net dll 文件,它仅依赖于接口文件和原始 C++ 头文件。

bazel

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

有什么真正的 unicode 替代品吗?

作为一个支持 unicode 的 C++ 开发人员,温和地说,是一件很痛苦的事情。Unicode 有一些不幸的属性,使得确定字母的大小写、转换字母或识别单个已知代码点等(可能是也可能不是字母)之外的几乎任何事情都变得非常困难。对于那些不幸没有内置 Unicode 支持的语言(即 C 和 C++)的人来说,唯一真正的救援似乎是ICU 。对其他语言的 unicode 支持可能不够好,也可能不够好。

所以,我想,一定有一个真正的unicode 替代品!即,除了具有查找数据结构(树、表等)并识别字符之间的关系之外,还可以轻松识别字符类的编码?我怀疑对于大多数文本来说,任何此类编码都可能是多字节的——这对我来说并不是真正关心的问题,但我承认这对其他人来说也是如此。提供这样的编码需要大量工作,因此我并不真正期望存在任何这样的编码。

unicode

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

如何解决在野牛中使用相同字符的两个不同操作符之间的模糊冲突

我执行的语言,有两家运营商之间的冲突| * |* || *-第一个是"规范"操作,其中两个|-characters环绕的表达,另一个是运营商还是,其中两个表达式三明治2个|-characters.

到目前为止,我能够解析类似的表达式||| a || b | | |- 即单个或三个级别的规范或(规范中任意数量的规范和任何系列的或运算符); 这只适用于表达式的尾部包含|彼此之间有空格的字符 - 即||| a || b | | |可以工作,但||| a || b |||会导致语法错误.我希望能够将最后一个版本解析为a or b内部的三个规范.

我的实现的简约版本(即相关部分):

野牛/ Yacc部分:

%token NUM
%token OR
%token NORM

%right LOR ROR 
%right NORM
%right OR
%right '|'

%%

expression:
    NUM
    | lnorm expression rnorm %prec NORM
    | expression LOR ROR expression %prec OR …
Run Code Online (Sandbox Code Playgroud)

c yacc bison flex-lexer

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

哪种语言会调用C++而没有明确的桥接?

在开发新产品的过程中,我们决定采用C++和C#的混合方式,但有人告诉他们将它们联系起来以允许C#代码调用C++代码很容易(更糟糕的是,它不是).

我们是非常有经验的C++程序员,而不是所有C#程序员,因此我们几乎不得不相信我们所读过的内容.一些调用C和Objective-C的尝试很有希望,我们甚至发现了一些文章,展示了如何在C#中提供非托管C++类 - 或者至少我们认为.文章中的C++代码不是C++,而是微软似乎认为可怕的怪物C++/CLI是C++.由于我们正在做C#的东西,以便在macOS和Windows中"免费"获取一些内容,因此C++/CLI也不是一个选项:-(.

无论如何,很多人都声称从一些特定的编程语言中调用C++代码很容易,但到目前为止,我还没有看到一个允许我这样做的单一代码(我没有过多关注这个,请给我一个明显的例子).C++总是意味着C完全没有C++的东西; 没有名称空间,类,没有stl,lambdas或任何东西.只是简单的愚蠢C.

那么,还有没有任何语言,除了C++(/ CLI),因此允许我做到以下几点:

  1. 使用C++构造函数创建类的实例,并使用C++析构函数调度它.

  2. foo f; f.foo();使用C++类在object()上调用成员函数.

  3. 使用std::vector,std::find_if,std::string和STL的其他的东西.不需要完全覆盖stl.

  4. 使用重载函数(即f(),f(int),f(std::string))

  5. 使用重载运算符(foo operator + (foo, foo))

  6. 使用C++ 11,C++ 14和/或C++ 17功能.

  7. 使用RAII(相当重要的恕我直言).

  8. 使用名称空间.

c++

3
推荐指数
2
解决办法
167
查看次数

为什么函数不被认为是C语言中的一等公民

在C(以及许多其他"低级"语言)中,函数具有类型.您可以使用与函数匹配的类型声明变量,并可以为此类变量分配函数,但人们坚持认为函数不是C中的一等公民.

使用指向函数的指针并将函数作为参数传递给其他函数是C中几个标准函数的关键; qsort例如,要求传递比较函数或者它不能做任何事情.

通过struct使用函数类型声明多个变量,在C中看到"面向对象"编程并不罕见.回调可以并且通常是(如果不总是 - 我无法想象其他任何方式)使用带有函数类型的变量或struct带有函数类型的成员的s实现.

那么,为什么函数不被认为是C中的一等公民呢?

(我确定这是重复的,但我似乎无法在这里找到任何类似的问题)

c

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

在 C# 中抑制事件的“从未使用”警告

我有一个关于从未使用过的类中的事件的警告。该类将接口实现为空对象,因此它永远不应该使用该事件;该事件仅存在于实现接口。

我尝试按照这个问题中接受的答案进行操作,但它没有做任何事情。该活动是公开的,我正在使用 Visual Studio 2017 和 Visual Studio for Mac(又名 Xamarin,又名 Monodevelop + 扩展),以防万一。

c#

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

如何使 genrule 依赖于外部 (http_archive)?

我正在使用 bazel 在 Windows 和 Mac 上构建一些 C++ 和 C# 清晰的代码。我正在做的项目分为两部分;gui 部分(取决于平台)和库部分。该库与其他项目共享,因此将它们混合到一个大项目中可能不是一个好主意。

我必须使用 genrule 来构建 GUI,但我找不到让它下载库的方法。genrules 不允许deps,我找不到任何其他合适的方法让 bazel 做我需要的事情(除了混合部分,这是我真正不想做的)。

bazel

0
推荐指数
1
解决办法
1040
查看次数

标签 统计

c ×3

bazel ×2

c++ ×2

bison ×1

c# ×1

c++-cli ×1

flex-lexer ×1

macros ×1

pointers ×1

unicode ×1

yacc ×1