小编Joh*_*ing的帖子

获取局部变量的名称

在开发和调试时,我有时希望能写出一个转换了一堆变量的名称,类型和值的1-liner.问题是我不知道如何访问变量的名称,如果我可以的话.

这是第一次尝试:

foo = 1
bar = "42"
baz = Hash.new

[foo, bar, baz].each do |v|
    puts "#{v.???} = (#{v.class}) #{v}"
    end
Run Code Online (Sandbox Code Playgroud)

我希望这个程序的输出是这样的:

foo = (Fixnum) 1 
bar = (String) 42 
baz = (Hash) ...
Run Code Online (Sandbox Code Playgroud)

我不知道???上面应该是什么.可以这样做吗?

ruby

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

BOOST_CHECK无法为自定义类型编译operator <<

我写了这个非常琐碎的课程,以便清楚我的问题是什么:

class A
{
public:
    int x;
    A(int y) {x=y;}
    bool operator==(const A &other) const {return x==other.x;}
};
Run Code Online (Sandbox Code Playgroud)

现在,如果我定义A first(1)和A second(1),那么BOOST_CHECK_EQUAL(第一个,第二个)应该通过似乎很自然.然而,当我尝试这样做时,我得到了50个错误,第一个听起来像:没有数学运算符<<在ostr << t这是升级代码中的某个地方...其他测试工作正常,比较已知类型甚至指针,但是类对象似乎发生了一些不同的事情.

c++ boost unit-testing

8
推荐指数
2
解决办法
3724
查看次数

在C++中进行转换操作后在子进程中使用虚函数

我有以下代码:

class A
{
};

class B : public A
{
    public:
        virtual void f() {}
};

int main()
{
    A* a = new A();
    B* b = static_cast<B*>(a);
    b->f();
}
Run Code Online (Sandbox Code Playgroud)

该程序因分段错误而失败.有两种解决方案可以使这个程序工作:

  1. 声明f非虚拟
  2. 不要调用b-> f()(即它不会因为演员而失败)

但是,两者都不是一种选择.我认为这不起作用,因为在vtable中查找.

(在实际程序中,A也有虚函数.此外,在构造函数中不调用虚函数.)

有没有办法使这个程序工作?

c++

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

可以boost :: program_options使用除" - "之外的分隔符吗?

我正在使用boost :: program_options这样:

namespace po = boost::program_options;
po::options_description desc("Options");
desc.add_options()
  ("help,?", "Show Options")
  ("capture-file,I", po::value<string>(), "Capture File")   
  ("capture-format,F", po::value<string>()->default_value("pcap"), "Capture File Format")
  ("output-file,O", po::value<string>()->default_value("CONOUT$"), "Output File");

po::variables_map vm;
po::store(po::command_line_parser(ac, av).options(desc)./*positional(pd).*/run(), vm);
Run Code Online (Sandbox Code Playgroud)

如果我通过命令行参数-I hithere它的工作原理,但我通过/I hithere升压抛出了boost::bad_any_cast一个what()"使用boost :: any_cast失败的转换"的.

是否可以使用program_options来解析/-delimitted或--delimitted选项?奖金的问题,可以将其进行配置,以便/-设置相同的选项,但在彼此的二元对立?例如,/verbose可能意味着详细记录,而-verbose可能意味着更简洁的记录.

c++ boost-program-options

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

专业模板类的模板构造函数

由于数周的14小时工作日,我的大脑已经融化.

我有一个模板类,我正在尝试为这个类编写一个模板转换构造函数,并专门构造该构造函数.编译器(MSVC9)对我很不满意.这是我正在尝试编写的实际代码的最小示例.编译器错误与代码内联.

帮助我解开我的大脑.我需要在这里做什么才能做我想做的事情?注意:在我的实际代码中,我必须在声明之外定义转换构造函数,因此这不是我的选项.

#include <string>
#include <sstream>
using namespace std;

template<typename A>
class Gizmo
{
public:
    Gizmo() : a_() {};
    Gizmo(const A& a) : a_(a) {};
    template<typename Conv> Gizmo(const Conv& conv) : a_(static_cast<A>(conv)) {};

private:
    A a_;
};

//
// ERROR HERE:
// " error C2039: 'Gizmo<B>' : is not a member of 'Gizmo<A>'"
//
template<> template<typename B> Gizmo<string>::Gizmo<typename B>(const B& b)
{
    stringstream ss;
    ss << b;
    ss >> a_;
}

int main()
{
    Gizmo<int> a_int;
    Gizmo<int> …
Run Code Online (Sandbox Code Playgroud)

c++ templates template-specialization

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

显式构造函数调用

我想知道是否有某种技巧可以使用对象指针显式调用构造函数.如果这是一个合法的语法,它将如下所示:

Foo *p = malloc( sizeof(Foo) );

p->Foo::Foo();
Run Code Online (Sandbox Code Playgroud)

PS我知道我能做到,Foo *p = new Foo();但有明确的理由明确使用malloc().

c++

7
推荐指数
2
解决办法
1883
查看次数

stdin keypress的asio服务处理程序

我已经修改了Boost asio教程的第3步,以便永远运行,并且每秒显示"tick"和"tock"而不是计数器:

#include <iostream>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>

void print(const boost::system::error_code& /*e*/,
    boost::asio::deadline_timer* t, int* count)
{
    if( !((*count) % 2) )
        std::cout << "tick\n";
    else
        std::cout << "tock\n";

    ++(*count);

    t->expires_at(t->expires_at() + boost::posix_time::seconds(1));
    t->async_wait(boost::bind(print,
          boost::asio::placeholders::error, t, count));
}

int main()
{
  boost::asio::io_service io;

  int count = 0;
  boost::asio::deadline_timer t(io, boost::posix_time::seconds(1));
  t.async_wait(boost::bind(print,
        boost::asio::placeholders::error, &t, &count));

  io.run();

  std::cout << "Final count is " << count << "\n";

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在我想异步地能够处理stdin上的按键.是否有一个io_service处理程序,我可以用它来响应按键,而不会阻塞睡眠或等待?

例如,我希望能够实现类似于以下的处理函数:

void handle_keypress(const boost::error_code&,
    char c)
{ …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-asio

7
推荐指数
2
解决办法
3945
查看次数

只执行makefile的第一个命令

我有以下makefile:

main.o: ServerSocket/main.cpp ../Shared/socket.h 
    g++ -c ServerSocket/main.cpp  -lstdc++

DriveInfo.o: ServerSocket/DriveInfo.cpp ServerSocket/DriveInfo.h ServerSocket/Consts.h
    g++ -c ServerSocket/DriveInfo.cpp  -lstdc++

ProcessInfo.o: ServerSocket/ProcessInfo.cpp ServerSocket/ProcessInfo.h ServerSocket/Consts.h
    g++ -c ServerSocket/ProcessInfo.cpp  -lstdc++

thread_pool.o: ServerSocket/thread_pool.cpp ServerSocket/thread_pool.h 
DriveInfo.o ProcessInfo.o thread_pool.o
server: main.o 
    g++ -o server main.o 
DriveInfo.o ProcessInfo.o thread_pool.o
Run Code Online (Sandbox Code Playgroud)

问题只是该文件的一个命令正在执行,所以如果我想执行下一个<我必须删除或注释上一个命令.这个makefile有什么问题?

makefile

7
推荐指数
2
解决办法
4447
查看次数

为什么我可以在std :: map <std :: string,int>中使用const char*作为键

我已经定义了一个数据结构

std::map<std::string, int> a;
Run Code Online (Sandbox Code Playgroud)

我发现我可以传递const char*作为键,如下所示:

a["abc"] = 1;
Run Code Online (Sandbox Code Playgroud)

哪个函数提供从const char*到std :: string的自动类型转换?

c++ type-conversion

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

Visual Studio 2012"智能"缩进定制

我正在使用Visual Studio 2012,并为C++文件打开1智能缩进.2 我想自定义Smart缩进的行为,以便格式化我输入的代码,使其符合我公司的编码风格.

如何定制智能缩进行为的所有细微方面?

例如,当我输入此代码时,智能缩进格式就像这样:

#include <cstdlib>
#include <string>
using namespace std;

struct Foo
{
    const string mA;
    const int mB;
    const string mC;

    Foo(const string& a,
        const int b,
        const string& c)
        :
    mA(a),
        mB(b),
        mC(c)
        {
        }
};

int main()
{
}
Run Code Online (Sandbox Code Playgroud)

大多数这是我想要的,除了冒号引入初始化列表,初始化列表中的第一项,以及构造函数体的缩进级别.我希望这些格式化,我希望Visual Studio自动为我做这些:

Foo(const string& a,
    const int b,
    const string& c)
:
    mA(a),
    mB(b),
    mC(c)
{
}
Run Code Online (Sandbox Code Playgroud)

如何自定义智能缩进的行为?我宁愿不使用像Visual Assist X这样的外部工具.


1:通过工具 > 选项 > 文本编辑器 > C/C++ > 选项卡 > …

c++ visual-studio visual-studio-2012

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