小编ben*_*san的帖子

使用boost程序选项时如何解决"boost :: bad_any_cast:使用boost :: any_cast转换失败"?

//Using boost program options to read command line and config file data
    #include <boost/program_options.hpp>
    using namespace std;
    using namespace boost;
    namespace po = boost::program_options;

int main (int argc, char *argv[])
{
    po::options_description config("Configuration");
    config.add_options()
                ("IPAddress,i","IP Address")
                ("Port,p","Port")
                 ;

    po::variables_map vm;
    po::store(po::parse_command_line(argc, argv, config),vm);
    po::notify(vm);

    cout << "Values\n";

    string address = (vm["IPAddress"].as<std::string >()).c_str();
    string port = (vm["Port"].as<std::string>()).c_str();

    cout << (vm["IPAddress"].as< string >()).c_str();
    cout << " " << (vm["Port"].as<string>()).c_str();

    return 0;

}
Run Code Online (Sandbox Code Playgroud)

输入的值是否以某种方式无法打印?

这是gdb输出,似乎是转换问题:

在抛出'boost :: exception_detail :: clone_impl的实例后终止调用

'what():boost :: bad_any_cast:使用boost …

c++ boost types casting boost-program-options

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

如何删除没有虚析构函数的多态类类型的对象

当我尝试从第三方SDK编译一些代码时,我收到以下错误.

*Description    Resource    Path    Location    Type
deleting object of polymorphic class type ‘Vendor_sys::VendorCode’ which has non-virtual destructor might cause undefined behaviour [-Werror=delete-non-virtual-dtor]   PnServer.cpp    /PCounter   line 467    C/C++ Problem*
Run Code Online (Sandbox Code Playgroud)

我不知道是否可以通过对Vendor SDK的部分了解来满足这个条件,其中大部分繁重工作都是在dll或库对象中完成的.

我的构建环境是带有gpp的Eclipse Juno.

我在Google中搜索了错误消息,但未找到此错误的任何实例.

那么,如果我不能修改供应商代码的黑盒子部分,我的选择是什么?

以下是make过程中失败的代码:

delete pData->unit;
Run Code Online (Sandbox Code Playgroud)

c++ inheritance destructor

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

如何将std :: basic_string类型转换为char类型的数组?

运行此代码时出现以下错误:

syslog(LOG_ERR | LOG_USER, "%s",errorString);
Run Code Online (Sandbox Code Playgroud)

不能转换'常量字符串{又名常量性病:: basic_string的}'为>参数'为const char*' '2'至'空隙的syslog(INT,常量字符*,...)' inServer.cpp/PeCounter
线478Ç/C++问题

我正在守护程序,并且当使用cout输出到stdio时,errorString值打印得很好,但是在使用syslog调用时它不会打印.

任何方式将std :: basic_string(char)变为'const char'的形式.

c++ string type-conversion

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

委托如何使用通用和可扩展的类响应多个事件?

我已经在rdlc报告中编写了一种处理多个子报告的技术,但是由于我试图使其具有通用性和可重复性,因此我不得不采用模型并针对每种情况稍微调整一下.

例如,如果我定义一个抽象接口,就像这样,我只需根据需要将其从winform剪切并粘贴到winform:

abstract class ISolutionStrategy
{
    public abstract void AlgorithmInterface(Int64 searchCriteria, SubreportProcessingEventArgs e);
}
Run Code Online (Sandbox Code Playgroud)

首先,我希望能够通过包含has-a对象将其带入每种形式.我还想封装委托处理调度的行为,并使处理方法也"通用".

因此,设计要求是:

  • 创建一个可以包含在winform中的对象,以处理多个子报表处理
  • 在winform中实例化和配置对象
  • 在winform中构建调度表或switch/case语句
  • 传递所有方法来处理该winform报表查看器的特定要求

目标是制作一个可以独立测试并且坚固耐用的物体,也不必剪切和粘贴滚轮,并为每个新的winform做一堆手动调整.

在我看来,有人找到了比我现在更好的设计.

创建一个可以包含在winform中的对象,以处理多个子报表处理

到目前为止,我在本地表单加载事件中有一个委托:

this.reportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(LocalReport_SubreportProcessing);
Run Code Online (Sandbox Code Playgroud)

它由*LocalReport_SubreportProcessing*方法中的switch语句处理.

该方法的主体包含一个switch语句:

void LocalReport_SubreportProcessing(object sender, SubreportProcessingEventArgs e)

        {
            String commonSubreportKey = _commonSubreportKey;

            switch (e.ReportPath)
            {
                case "rptSubAlternateParts":
                    runSubAlternatePart(e, commonSubreportKey, new GetAlternateParts());
                    break;
                case "rptSubGetAssemblies":
                    runSubFailurePart(e, commonSubreportKey, new GetAssemblies());
                    break;
                case "rptSubGetAssemblies":
                    runSubGetGetEndItemLRMFailureInfo(e, commonSubreportKey, new GetEndItemLRMFailureInfo());
                    break;
                case "rptSubGetAssemblies":
                    runSubGetSubAssemblies(e, commonSubreportKey, new GetSubAssemblies());
                    break;
                default:
                    break;
            }
Run Code Online (Sandbox Code Playgroud)
在旁边:

在我看来,与我考虑的替代方案相比,这种转换大多是人类可读的.我考虑使用带有报告名称的哈希作为键,并将函数调用数据作为值.但是,我真的不知道怎么做,我认为其他人更难理解.


之后,调用一个函数,该函数重新排列switch语句中从函数调用传递的信息:

    private static void …
Run Code Online (Sandbox Code Playgroud)

c# delegates rdlc strategy-pattern subreports

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

make-function来自哪里?

此代码有效:

(define list-of-events 
  (for/list ([(date code)
              (in-query odc "select date, code from attendance
                             where student_id = ? and term_code = ?"
                        "12345" "654321")])
    (make-attendance-event date code)))
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试复制另一个表的行为时,make-attendance-event的并行项会抱怨它是一个"未绑定的标识符".

现在,参加考勤活动来自哪里?

racket

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

如何使用PInvoke作为I8类型进行编组?

我有一个UInt32值,我想使用InterOpServices传递给外部DLL.

非托管代码的原型是:

[DllImport("svr.dll")]
public static extern UInt32  CreateTag (
    [MarshalAs(UnmanagedType.LPStr)] String Name,
    Object Value,
    UInt16 InitialQuality,
    bool IsWritable);
Run Code Online (Sandbox Code Playgroud)

调用代码是:

int myValue = Convert.ToInt32(item); //How to marshal as I8 type
tagNumber = (UInt32)svr_DLL.CreateTag(
    DeviceName + "." + el.tagName,
    myValue, // <-- this argument
    192,
    Convert.ToBoolean(el.tagEditable));
Run Code Online (Sandbox Code Playgroud)

我想传递给I8类型的对象值"myValue".

如何才能做到这一点?

c# pinvoke marshalling interopservices

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