关于C++ 11语法的简单问题.有一个示例代码(从源代码减少一个)
struct Wanderer
{
explicit Wanderer(std::vector<std::function<void (float)>> & update_loop)
{
update_loop.emplace_back([this](float dt) { update(dt); });
}
void update(float dt);
};
int main()
{
std::vector<std::function<void (float)>> update_loop;
Wanderer wanderer{update_loop}; // why {} ???
}
Run Code Online (Sandbox Code Playgroud)
我想知道,如何用大括号调用构造函数,Wanderer wanderer{update_loop};
它既不是初始化列表,也不是统一初始化.这是什么东西?
我在模板化的类中遇到了循环依赖的问题.有一个代码示例:
template <typename T> struct A
{
typedef typename T::C D;
//typename T::C c;
};
struct B : public A<B>
{
struct C {};
};
Run Code Online (Sandbox Code Playgroud)
当我尝试实例化B时,我得到一个编译器错误:'C'不是'B'(MSVC)的成员或 无效使用不完整类型'struct B'(GCC).
更改样本以使其工作的最佳方法是什么?
例如,我有两个班
class Foo;
class Bar;
class Foo {
const Bar &m_bar;
...
};
class Bar {
const Foo &m_foo;
...
};
Run Code Online (Sandbox Code Playgroud)
让我们foo
为对象Foo
和bar
为对象Bar
.有什么办法(正常或"黑客")创建/初始化foo
和bar
其成员m_bar
,并m_foo
会互相引用(我的意思foo.m_bar
是bar
和bar.m_foo
是"富")?
允许添加任何成员,Foo
并Bar
为其添加父项,以使其成为模板等.
c++ initialization circular-dependency circular-reference member-initialization
我正在向vim中的系统剪贴板行使各种行.我可以做到51gg116"+yy
.我想通过:
符号来做.我可以""
通过命令复制到注册:51,116y
.但是,命令51,116"+y
不起作用.如何修复最后一个命令?
我有一些处理,我需要关闭它.代码中有一些地方可以关闭句柄.那么,这是一个正确的关闭方式吗?
HANDLE h;
....
if ( h != INVALID_HANDLE_VALUE ) {
::CloseHandle(h);
h = INVALID_HANDLE_VALUE;
}
Run Code Online (Sandbox Code Playgroud)
关于位图句柄有一个相同的问题:
HBITMAP hb;
....
if ( hb != INVALID_HANDLE_VALUE ) {
::DeleteObject(hb);
hb = INVALID_HANDLE_VALUE;
}
Run Code Online (Sandbox Code Playgroud)
编辑:我想,有一些误解.我知道CloseHandle
是关闭手柄.我想知道关闭手柄的正确方法.删除指针时会出现类似的情况.
Foo *foo = new Foo();
// for example there is 2 functions that can delete foo
void bar() {
....
delete foo;
}
void duck() {
....
delete foo;
}
Run Code Online (Sandbox Code Playgroud)
因此,以下代码意味着问题:
bar();
duck();
Run Code Online (Sandbox Code Playgroud)
这种情况有一些解决方法.我们需要定义bar
和这样的duck
函数:
void bar() {
....
if (foo) …
Run Code Online (Sandbox Code Playgroud) 我不擅长命令行编译.我的问题是无法编译简单的项目,这取决于Boost.以下是我尝试的日志:
$ g++ -Wall test.cpp -o main
/tmp/ccCTvBYE.o: In function `__static_initialization_and_destruction_0(int, int)':
test.cpp:(.text+0x6b): undefined reference to `boost::system::generic_category()'
test.cpp:(.text+0x77): undefined reference to `boost::system::generic_category()'
test.cpp:(.text+0x83): undefined reference to `boost::system::system_category()'
/tmp/ccCTvBYE.o: In function `boost::asio::error::get_system_category()':
test.cpp:(.text._ZN5boost4asio5error19get_system_categoryEv[_ZN5boost4asio5error19get_system_categoryEv]+0x5): undefined reference to `boost::system::system_category()'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
所以,还有我发现添加指令-lboost_system
或-lboost_system-mt
.我得到以下内容:
$ g++ -lboost_system -Wall test.cpp -o main
/usr/bin/ld: cannot find -lboost_system
collect2: error: ld returned 1 exit status
$ g++ -lboost_system-mt -Wall test.cpp -o main
/usr/bin/ld: cannot find -lboost_system-mt
collect2: …
Run Code Online (Sandbox Code Playgroud) 我想自动插入C++文件的注释片段.谷歌搜索建议c.vim
插件.我安装了它.现在,当我创建一个文件时,我会得到如下的模板.
/* =====================================================================================
*
* Filename: Foo.h
*
* Description: :
*
* Version: 1.0
* Created: 04/14/2014 08:35:44 PM
* Revision: none
* Compiler: gcc
*
* Author: YOUR NAME (),
* Organization:
*
* =====================================================================================
*/
Run Code Online (Sandbox Code Playgroud)
从:h csupport
我捕获,我可以创建自己的评论模板.是否有更简单的方法在项目中获得doxygen风格的评论?或者这些模板可能在某处可用?
我有一个像下面的大开关:
public int procList(int prov, ArrayList<TXValue> txValueList, Context context)
{
switch(prov)
{
case Foo.PROV_ONE:
return proc_one(txValueList, context);
case Foo.PROV_NOE:
return proc_noe(txValueList, context);
case Foo.PROV_BAR:
return proc_bar(txValueList, context);
case Foo.PROV_CABAR:
return proc_cabar(txValueList, context);
case Foo.PROV_FAR:
return proc_far(txValueList, context);
case Foo.PROV_TAR:
return proc_tar(txValueList, context);
case Foo.PROV_LBI:
return 408;
default:
return -1;
}
}
Run Code Online (Sandbox Code Playgroud)
在c ++中,我可以std::map<Foo, some_function_ptr>
按照以下方式使用和使用它:
map[prov](txValueList, context);
Run Code Online (Sandbox Code Playgroud)
Java中没有指向函数的指针.但是,它使用抽象类,就像它在答案中一样.那么,有没有一种最好的方法来消除switch
java中的大条款?
我正在尝试编写一个简单的除法函数,但是我得到了一个错误
PS C:\Users\john> Function Div($x, $y) { $x / $y }
PS C:\Users\john> Div (1, 1)
Method invocation failed because [System.Object[]] doesn't contain a method named 'op_Division'.
At line:1 char:28
+ Function Div($x, $y) { $x / <<<< $y }
+ CategoryInfo : InvalidOperation: (op_Division:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
Run Code Online (Sandbox Code Playgroud)
我的错是什么?谢谢