小编dar*_*mos的帖子

类的复制和交换习惯用法,引用抽象类

我正在尝试为我的类实现Copy-and-Swap Idiom,因为我需要实现operator=,因为它有引用成员,并且引用只能分配一次,我认为前面提到的成语是一个有效的解决方法.

但现在我收到了一个构建错误:

>c:\Program Files\Microsoft Visual Studio 10.0\VC\include\utility(102): error C2259: 'IVariables' : cannot instantiate abstract class
1>          due to following members:
1>          'IVariables::~IVariables(void)' : is abstract
1>          d:\svn.dra.workingcopy\serialport\IVariables.h(6) : see declaration of 'IVariables::~IVariables'
1>          'std::string &IVariables::operator [](const std::string &)' : is abstract
1>          d:\svn.dra.workingcopy\serialport\IVariables.h(7) : see declaration of 'IVariables::operator []'
1>          'unsigned int IVariables::getVariableLength(const std::string &) const' : is abstract
1>          d:\svn.dra.workingcopy\serialport\IVariables.h(8) : see declaration of 'IVariables::getVariableLength'
1>          Message.cpp(32) : see reference to function template instantiation …
Run Code Online (Sandbox Code Playgroud)

c++ abstract-class reference copy-and-swap

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

例外与否?如果"是" - 检查与否?

我认为这涉及到一个广泛的主题,但是当一切都以最佳方式完成时,除了理想的变体之外,处理程序工作流程的最佳方法是什么.

让我们更具体一点:

一个类有一个方法,该方法对其参数进行操作并返回结果.例如:

public Map<Object,OurObject> doTheWork(OtherObject oo);
Run Code Online (Sandbox Code Playgroud)

我排除的一个可能的结果是,null如果有其他方式,但理想的回归.

处理这种情况有正确的方法("银弹",或所谓的"最佳实践")吗?

我看到其他三个结果:

1 - 该方法返回EMPTY_MAP;

2 - 该方法检查了异常;

3 - 抛出RuntimeException;

如果对该问题没有一般正确答案 - 应该考虑哪些条件?

关于设计的合同原则(简单地说,该方法的责任是照顾输出,假设输入参数是正确的) - 是正确的方法来抛出任何异常或最好是空车返回的结果,但正确在结构中(例如,不为null)

language-agnostic oop exception-handling

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

std :: tr1 :: shared_ptr是否互相排斥?

我有一个包含a BYTE*,一个引用计数器的类,CRITICAL_SECTION它保护它们不受并发访问的影响.

我想用一个替换所有这些std::tr1::shared_ptr<BYTE>.在MSDN说:

多个线程可以同时读写不同的shared_ptr对象,即使这些对象是共享所有权的副本也是如此.

一切听起来都没问题,直到我发现CRITICAL_SECTION课堂外的东西用来"锁定"它并以互相排斥的方式改变它的内容.好吧,它打破了封装,我想改变它.

我知道shared_ptr保证内存将被释放,但是当你写入内存时它是否保证互斥?

c++ windows shared-ptr mutual-exclusion

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

C++/CLI,NUnit和Resharper

假设我有一个用C++/CLI编写的NUnit测试项目,用/clr交换机构建.也就是说,它可以引用和使用本机代码,它不是纯粹的托管程序集.

NUnit可以运行这样的项目,但可以使用Resharper从Visual Studio中完成吗?我有R#5.x,我不能(甚至看不到R#代码窗口左边的图标来启动测试).最新版本可以R#这样做吗?

resharper nunit c++-cli

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

iPhone模拟器 - 连接到主机

我正在开发一个iphone应用程序,它将在完成后通过互联网与后端服务器进行通信.当我正在进行开发时,我经常处于没有互联网连接的情况下(阅读"长途飞行").我有一个在我的本地mac上运行的Web服务器,它有一个完整的实时网站副本.从理论上讲,我应该能够从iphone模拟器连接到主机上运行的Web服务器 - 但是如何?请注意,我没有外部连接,因此所有mac IP接口都处于"断开连接"状态(此外,它们已关闭 - 节省电池电量).

我需要在模拟器中使用哪些地址?主机mac和sim之间是否存在某种桥接接口?

非常感谢.

iphone connection networking simulator

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

Log4Net登录MySql不写

我试图登录MySql表,但它不会写.它没有显示任何错误,也没有在mysql表中写任何内容.

这是log4net的web.config设置:

<log4net>

    <appender name="MySql_ADONetAppender" type="log4net.Appender.ADONetAppender">
      <bufferSize value="100" />
      <connectionType value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data"/>
      <connectionString value="Server=127.0.0.1;Database=svil;Uid=LogUser;Pwd=LogPass;"/>
      <commandText value="INSERT INTO Log (Date,Thread,Level,Logger,Message,Exception) VALUES (?log_date, ?thread, ?log_level, ?logger, ?message, ?exception)" />
      <parameter>
        <parameterName value="?log_date"/>
        <dbType value="DateTime"/>
        <layout type="log4net.Layout.RawTimeStampLayout"/>
      </parameter>
      <parameter>
        <parameterName value="?thread"/>
        <dbType value="String"/>
        <size value="255"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%thread"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="?log_level"/>
        <dbType value="String"/>
        <size value="50"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%level"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="?logger"/>
        <dbType value="String"/>
        <size value="255"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="?message"/>
        <dbType value="String"/>
        <size …
Run Code Online (Sandbox Code Playgroud)

c# mysql log4net

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

为什么Perl只读取文件中的一半行?

我想逐行读取文件,每行分割字符串并打印出来.但脚本只打印偶数行.

文件:

line1:item1
line2:item2
line3:item3
line4:item4
line5:item5
line6:item6
Run Code Online (Sandbox Code Playgroud)

和脚本:

$FILE = "file";
open($FILE, "<", "file") or die("Could not open file.");

while (<$FILE>) {
    my $number = (split ":", <$FILE>)[1];
    print $number;
}
Run Code Online (Sandbox Code Playgroud)

输出:

item2
item4
item6
Run Code Online (Sandbox Code Playgroud)

string perl split file line

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

为什么三元运算符与if-else在这里不一样?

我正在使用TR1 std::function来实现一个简单的回调机制.如果我不想nullptr回调,我会注册为回调处理程序.这编译并正常工作:

void Foo::MessageHandlingEnabled( bool enable ){
    if( enable )
        m_Bar.RegisterMessageHandler( std::bind(&Foo::BarMessageHandler, this, std::placeholders::_1) );
    else
        m_Bar.RegisterMessageHandler( nullptr );
}
Run Code Online (Sandbox Code Playgroud)

如果我使用三元运算符重写它...

void Foo::MessageHandlingEnabled( bool enable ){
        m_Bar.RegisterMessageHandler( enable?
                                      std::bind(&Foo::BarMessageHandler, this, std::placeholders::_1) :
                                      nullptr );   

 }
Run Code Online (Sandbox Code Playgroud)

... VC++的编译器说:

错误C2446:':':没有从'nullptr'转换为'std :: tr1 :: _ Bind <_Result_type,_Ret,_BindN>'1> 1>
[1> _Result_type = void,1> _Ret = void,1>
_BindN = std :: tr1 :: _ Bind2,Foo*,std :: tr1 :: _ Ph <1 >> 1>] 1>没有构造函数可以采用源类型,或者构造函数重载解析是模糊的

这是编译器的限制,还是我做了一些愚蠢的事情?我知道在这种特殊情况下,使用三元运算符可能无法获得任何好处,但我只是好奇.

c++ visual-studio-2010 nullptr c++11 std-function

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

这个陈述有什么作用?

可能重复:
将未使用的返回值转换为void
C++转换为void的目的是什么?

在使用CMake 下载并构建GDCM代码后,我偶然发现了这个问题:

void error_callback(const char *msg, void *) {
    (void)msg;
    gdcmErrorMacro( "Error in gdcmopenjpeg" << msg );
}
Run Code Online (Sandbox Code Playgroud)

第一行有什么作用?从来没有见过这样的东西.请记住,如果重要的话,我告诉CMake使用Visual Studio 2010进行构建.

c++ syntax

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