我正在尝试为我的类实现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) 我认为这涉及到一个广泛的主题,但是当一切都以最佳方式完成时,除了理想的变体之外,处理程序工作流程的最佳方法是什么.
让我们更具体一点:
一个类有一个方法,该方法对其参数进行操作并返回结果.例如:
public Map<Object,OurObject> doTheWork(OtherObject oo);
Run Code Online (Sandbox Code Playgroud)
我排除的一个可能的结果是,null如果有其他方式,但理想的回归.
处理这种情况有正确的方法("银弹",或所谓的"最佳实践")吗?
我看到其他三个结果:
1 - 该方法返回EMPTY_MAP;
2 - 该方法检查了异常;
3 - 抛出RuntimeException;
如果对该问题没有一般正确答案 - 应该考虑哪些条件?
关于设计的合同原则(简单地说,该方法的责任是照顾输出,假设输入参数是正确的) - 是正确的方法来抛出任何异常或最好是空车返回的结果,但正确在结构中(例如,不为null)
我有一个包含a BYTE*,一个引用计数器的类,CRITICAL_SECTION它保护它们不受并发访问的影响.
我想用一个替换所有这些std::tr1::shared_ptr<BYTE>.在MSDN说:
多个线程可以同时读写不同的shared_ptr对象,即使这些对象是共享所有权的副本也是如此.
一切听起来都没问题,直到我发现CRITICAL_SECTION课堂外的东西用来"锁定"它并以互相排斥的方式改变它的内容.好吧,它打破了封装,我想改变它.
我知道shared_ptr保证内存将被释放,但是当你写入内存时它是否保证互斥?
假设我有一个用C++/CLI编写的NUnit测试项目,用/clr交换机构建.也就是说,它可以引用和使用本机代码,它不是纯粹的托管程序集.
NUnit可以运行这样的项目,但可以使用Resharper从Visual Studio中完成吗?我有R#5.x,我不能(甚至看不到R#代码窗口左边的图标来启动测试).最新版本可以R#这样做吗?
我正在开发一个iphone应用程序,它将在完成后通过互联网与后端服务器进行通信.当我正在进行开发时,我经常处于没有互联网连接的情况下(阅读"长途飞行").我有一个在我的本地mac上运行的Web服务器,它有一个完整的实时网站副本.从理论上讲,我应该能够从iphone模拟器连接到主机上运行的Web服务器 - 但是如何?请注意,我没有外部连接,因此所有mac IP接口都处于"断开连接"状态(此外,它们已关闭 - 节省电池电量).
我需要在模拟器中使用哪些地址?主机mac和sim之间是否存在某种桥接接口?
非常感谢.
我试图登录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) 我想逐行读取文件,每行分割字符串并打印出来.但脚本只打印偶数行.
文件:
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) 我正在使用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>没有构造函数可以采用源类型,或者构造函数重载解析是模糊的
这是编译器的限制,还是我做了一些愚蠢的事情?我知道在这种特殊情况下,使用三元运算符可能无法获得任何好处,但我只是好奇.
在使用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进行构建.