小编Qua*_*um7的帖子

在用c ++初始化对象之前声明一个对象

是否可以在不实例化的情况下在c ++中声明变量?我想做这样的事情:

Animal a;
if( happyDay() ) 
    a( "puppies" ); //constructor call
else
    a( "toads" );
Run Code Online (Sandbox Code Playgroud)

基本上,我只是想声明条件的外部,以便它获得正确的范围.

有没有办法在不使用指针和a在堆上分配的情况下执行此操作?也许引用聪明的东西?

c++ scope declaration instantiation

47
推荐指数
7
解决办法
4万
查看次数

C++迭代器和循环优化

我看到很多c ++代码看起来像这样:

for( const_iterator it = list.begin(),
     const_iterator ite = list.end();
     it != ite; ++it)
Run Code Online (Sandbox Code Playgroud)

与更简洁的版本相反:

for( const_iterator it = list.begin();
     it != list.end(); ++it)
Run Code Online (Sandbox Code Playgroud)

这两个约定之间的速度会有什么不同吗?由于list.end()只被调用一次,因此第一个会稍快一些.但由于迭代器是const,似乎编译器会将此测试从循环中拉出来,为两者生成等效的汇编.

c++ compiler-construction optimization iterator coding-style

46
推荐指数
6
解决办法
4万
查看次数

多个分支的Mercurial存储库布局

我有许多准相关项目,我想版本控制.在SVN中,我将它们设置为单个项目中的多个目录

/scripts  #updates in sync with project1 & project2
/project1 #requires database
/project2 #requires database
/database
Run Code Online (Sandbox Code Playgroud)

当然,这个玩具示例可以使用其他SVN布局,但这种布局具有以下优点:

  • 我可以在分支之间复制文件,同时保留历史记录
  • 我只能查看一部分项目,例如svn co repo/project2; svn co repo/database.如果project1很大,这可以节省大量的存储和时间.
  • 易于存储库管理,因为所有项目都定义了一次用户访问权限

由于无法克隆mercurial repo的单个目录,因此这种范例不能很好地映射到mercurial .所以我的问题是:在mercurial中存储大型密切相关项目的最常用方法是什么?

我的想法:

  • 多个存储库 - 丢失在项目之间移动的文件的历史记录
  • 森林 - 似乎停滞不前,我不确定这个扩展是多么稳定
  • 命名分支,主要是不相关的内容
  • SubRepos - 不幸的是我正在运行Ubuntu 9.04,它只运送hg 1.1.2.否则这看起来是个不错的选择

svn version-control mercurial project-management

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

在C++预处理器中拆分参数

我正在处理的一些遗留代码有一个宏,它返回一个以逗号分隔的列表,用作函数参数.这很难看,但配置文件包含许多这些,现在很难改变.

#define XY1 0,0
#define XY2 1,7
...

void fun_point(x,y);

fun_point(XY1);
Run Code Online (Sandbox Code Playgroud)

只要它是一个被调用的函数,它就可以正常工作.但是,当尝试使用参数调用另一个宏时,整个字符串被视为一个参数,而不是将逗号分割为两个参数

#define MAC_POINT(x,y) (x+y)
MAC_POINT(XY1) #not expanded by preprocessor 
Run Code Online (Sandbox Code Playgroud)

在不更改XY定义的情况下,是否存在解决此问题的方法?

c++ macros c-preprocessor

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

在python中组合几种结构类型

如何指定一个必须满足多个协议的对象?例如,假设我需要一个同时满足Reversible和 的对象Iterable

from typing import Iterable, Reversible

l = [1, 2, 3]
r: Reversible[int] = l
i: Iterable[int] = l
reversed(r)  # fine
iter(i)  # fine
reversed(i)  # err since not iterable
iter(r)  #err since not reversible
Run Code Online (Sandbox Code Playgroud)

我想以某种方式注释一个可以进行所有操作的变量。例如(组成语法):

T = TypeVar('T')
ReversibleIterable = Intersection[Reversible[T], Iterable[T]]

ri: ReversibleIterable[int] = l
reversed(ri)  # fine
iter(ri)  # fine
Run Code Online (Sandbox Code Playgroud)

这样的事情存在吗?我使用协议、有界 TypeVar 等寻找解决方法,但无法使其工作。

python types type-hinting mypy

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

在 pandas 中加载带有二进制数据的 CSV 文件

我正在尝试解析 CSV 文件(来自外部数据源),其中其中一列使用不一致的字符编码。我不想尝试让数据提供者使用一致的编码,而是只想将该列读取为二进制数据。然而,pandas.read_csv似乎在解析之前将整个文件解码为字符串,因此这给了我错误(UnicodeDecodeError)。这是一个玩具示例(python 3):

\n\n
>>> from io import BytesIO\n>>> import pandas as pd\n>>> csv = b\'Encoding,Data\\nascii,abc\\nwindows-1252,\\xae\\nutf-8,\\xe2\\x80\\x9c1\\xe2\\x80\\x9d\\n\'\n>>> pd.read_csv(BytesIO(csv))\nTraceback (most recent call last):\n  File "pandas/_libs/parsers.pyx", line 1130, in pandas._libs.parsers.TextReader._convert_tokens\n  File "pandas/_libs/parsers.pyx", line 1254, in pandas._libs.parsers.TextReader._convert_with_dtype\n  File "pandas/_libs/parsers.pyx", line 1269, in pandas._libs.parsers.TextReader._string_convert\n  File "pandas/_libs/parsers.pyx", line 1459, in pandas._libs.parsers._string_box_utf8\nUnicodeDecodeError: \'utf-8\' codec can\'t decode byte 0xae in position 0: invalid start byte\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想要一个与此等效的结果:

\n\n
>>> df = pd.DataFrame({\'Encoding\': [\'ascii\',\'windows-1252\',\'utf-8\'],\n...                    \'Data\': [b\'abc\',b\'\\xae\',b\'\\xe2\\x80\\x9c1\\xe2\\x80\\x9d\']})\n>>> df\n       Encoding                          Data\n0         ascii                        b\'abc\'\n1  windows-1252                       b\'\\xae\'\n2         utf-8  b\'\\xe2\\x80\\x9c1\\xe2\\x80\\x9d\'\n
Run Code Online (Sandbox Code Playgroud)\n\n …

python csv pandas python-unicode

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