在开发和调试时,我有时希望能写出一个转换了一堆变量的名称,类型和值的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)
我不知道???上面应该是什么.可以这样做吗?
我写了这个非常琐碎的课程,以便清楚我的问题是什么:
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这是升级代码中的某个地方...其他测试工作正常,比较已知类型甚至指针,但是类对象似乎发生了一些不同的事情.
我有以下代码:
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)
该程序因分段错误而失败.有两种解决方案可以使这个程序工作:
但是,两者都不是一种选择.我认为这不起作用,因为在vtable中查找.
(在实际程序中,A也有虚函数.此外,在构造函数中不调用虚函数.)
有没有办法使这个程序工作?
我正在使用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可能意味着更简洁的记录.
由于数周的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) 我想知道是否有某种技巧可以使用对象指针显式调用构造函数.如果这是一个合法的语法,它将如下所示:
Foo *p = malloc( sizeof(Foo) );
p->Foo::Foo();
Run Code Online (Sandbox Code Playgroud)
PS我知道我能做到,Foo *p = new Foo();但有明确的理由明确使用malloc().
我已经修改了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) 我有以下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有什么问题?
我已经定义了一个数据结构
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的自动类型转换?
我正在使用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++ > 选项卡 > …