小编def*_*ode的帖子

在构造函数中做什么(不)

我想问你关于C++中构造函数的最佳实践.我不太确定我应该在构造函数中做什么,什么不能.

我应该只将它用于属性初始化,调用父构造函数等吗?或者我甚至可以将更复杂的函数放入其中,例如读取和解析配置数据,设置外部库aso

或者我应该为此编写特殊功能?RESP.init()/ cleanup()

什么是PRO和CON?

我想出了,例如,我可以在使用init()和时删除共享指针cleanup().我可以在堆栈上创建对象作为类属性,并在以后构建它时对其进行初始化.

如果我在构造函数中处理它,我需要在运行时实例化它.然后我需要一个指针.

我真的不知道该如何决定.

也许你可以帮帮我吗?

c++ oop constructor shared-ptr

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

Visual Studio中的GCC样式弱链接?

GCC能够通过虚拟方式建立符号链接__attribute__((weak)).我想在静态库中使用弱符号,用户可以在其应用程序中覆盖它.一个GCC风格的弱符号会让我这样做,但我不知道它是否可以用visual studio完成.

Visual Studio是否提供类似功能?

c c++ gcc visual-studio weak-linking

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

为什么Kiln基于Mercurial,而不是其他(D)VCS

选择Mercurial作为FogCreek Kiln的基础是什么原因,FogCreek Kiln是一个源代码管理系统,具有紧密集成的代码审查和FogBugz集成?

为什么Mercurial,而不是其他(分布式)版本控制系统,如Bazaar,Git或Monotone,或创建自己的版本控制系统,如Fossil(分布式软件配置管理,包括bug跟踪和维基)呢?

使FogCreek选择Mercurial作为Kiln引擎的功能是什么?

version-control mercurial dvcs kiln

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

如何在定义类时自动注册一个类

我希望在定义类时注册一个类实例.理想情况下,下面的代码可以解决问题.

registry = {}

def register( cls ):
   registry[cls.__name__] = cls() #problem here
   return cls

@register
class MyClass( Base ):
   def __init__(self):
      super( MyClass, self ).__init__() 
Run Code Online (Sandbox Code Playgroud)

不幸的是,此代码会生成错误NameError: global name 'MyClass' is not defined.

#problem here我正在尝试实例化的一行是什么,MyClass但装饰者还没有返回,所以它不存在.

是不是在使用元类或类似的东西?

python oop design-patterns metaclass decorator

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

boost :: lock_guard vs boost :: mutex :: scoped_lock

这是首选boost::lock_guard还是boost::mutex::scoped_lock

我正在使用Boost.Thread,希望在可用时转向C++ 11线程.

scoped_lock下一个c ++标准的一部分吗?

是否优先选择其他优势?


:我知道,scoped_lock仅仅是一个typedeflock_guard.


编辑:我错了scoped_lock不是typedeflock_guard.这是一个typedefunique_lock.

boost future-proof c++11

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

确定正则表达式是否是另一个的子集

我有一个庞大的正则表达式集合,当匹配时调用一个特定的http处理程序.一些较旧的正则表达式是无法访问的(例如a.c* ? abc*),我想修剪它们.

是否有一个库给出两个正则表达式会告诉我第二个是否是第一个的子集?

我一开始并不确定这是否具有可判定性(它的气味就像一个不同名称的停止问题).但事实证明它是可判定的.

regex halting-problem regular-language

34
推荐指数
4
解决办法
4231
查看次数

切换枚举时在switch语句中使用default

切换枚举时,您的程序是什么?每个枚举都包含在案例中?理想情况下,您希望代码能够成为未来的证明,您是如何做到的?

另外,如果一些白痴向枚举类型转换了一个任意的int呢?是否应该考虑这种可能性?或者我们是否应该假设在代码审查中会发现这样一个令人震惊的错误?

enum Enum
{
    Enum_One,
    Enum_Two
};

Special make_special( Enum e )
{
    switch( e )
    {
        case Enum_One:
            return Special( /*stuff one*/ );

        case Enum_Two:
            return Special( /*stuff two*/ );
    }
}

void do_enum( Enum e )
{
    switch( e )
    {
        case Enum_One:
            do_one();
            break;

        case Enum_Two:
            do_two();
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)
  • 离开默认情况,gcc会警告你(视觉工作室会吗?)
  • 添加一个默认情况assert(false);
  • 添加一个抛出可捕获异常的默认情况
  • 添加一个抛出不可捕获异常的默认情况(可能只是策略从不捕获它或总是重新抛出).
  • 我没有考虑过的更好的东西

我特别感兴趣的是你为什么选择这样做.

c++ enums switch-statement

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

为什么std :: vector :: data和std :: string :: data不同?

Vector的新方法data()提供了const和非const版本.
但是string的data()方法只提供const版本.

我认为他们改变了措辞,std::string以便现在要求chars连续(比如std::vector).

当时std::string::data只是错过了什么?或者是一个很好的理由只允许const访问字符串的底层字符?

注意:std::vector::data有另一个很好的功能,调用data()空向量不是未定义的行为.尽管&vec.front()是不确定的行为,如果它是空的.

c++ standards c++11

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

多线程的偏执狂

这是一个复杂的问题,请在回答之前仔细考虑.

考虑这种情况.两个线程(读取器和写入器)访问单个全局int.这样安全吗?通常,我会毫不犹豫地回答,是的!

然而,在我看来,Herb Sutter并不这么认为.在他关于有效并发的文章中,他讨论了一个有缺陷的无锁队列纠正的版本.

在第一篇文章的末尾和第二篇文章的开头,他讨论了很少考虑的变量特征,即写入顺序.Int是原子的,很好,但是int不一定是有序的,它可以破坏任何无锁算法,包括我上面的场景.我完全同意,保证现有和未来所有平台上正确的多线程行为的唯一方法是使用原子(AKA内存屏障)或互斥.

我的问题; 在实际硬件上写的重写是否有问题?还是多线程的偏执狂只是迂腐?
那么经典的单处理器系统呢?
那些更简单的RISC处理器如嵌入式电源?

澄清:我对Sutter先生所说的硬件(处理器/缓存)重新排序变量写入更感兴趣.我可以阻止优化器使用编译器开关破坏代码或手动检查汇编后编译.但是,我想知道硬件是否仍然可以在实践中搞乱代码.

c c++ hardware multithreading

29
推荐指数
4
解决办法
2000
查看次数

asio :: tcp :: socket的async_read_some和async_receive有什么区别?

有什么区别:

  • boost::asio::tcp::socket::async_read_some()
  • boost::asio::tcp::socket::async_receive()

据我所知,他们的文件是相同的.

我应该选择哪个?

c++ boost-asio

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