摘自cppcon2015的幻灯片:
unique_ptr<A> f() {
auto a = make_unique<A>();
return a;
}
//Why does this even compile?
const A & dangling = *f();
//BOOM!!!
use(dangling);
Run Code Online (Sandbox Code Playgroud)
我的问题是:对于*this的rvalue引用,这可以解决吗?
我在cppreference的spec中看到:
typename std::add_lvalue_reference<T>::type operator*() const;
Run Code Online (Sandbox Code Playgroud)
题:
operator*
rvalue 是否有意义unique_ptr
并且只有对于左值有效的解引用unique_ptr
?unique_ptr
解除引用吗?像这样:
//Make sure it is an lvalue.
typename std::add_lvalue_reference<T>::type operator*() const &;
Run Code Online (Sandbox Code Playgroud)
注意:我不确定语法或正确性,我对*this的rvalue引用没有经验.
我对异步编程不是很熟悉,我有一个问题。
我的问题如下。鉴于 boost.asio 中 C++11 的 echo_server 示例:http : //www.boost.org/doc/libs/1_60_0/doc/html/boost_asio/example/cpp11/spawn/echo_server.cpp
我想知道是否std::make_shared<session>
可以用C++14中的a替换C++14中的a std::unique_ptr<session>
,避免引用计数的开销。
我不确定,因为我们有shared_from_this()
但没有类似的东西unique_from_this()
,所以我如何unique_ptr<session>
从内部访问this
?。
我的问题很简单.在C++ 11我们有std::mutex
和std::lock_guard
和std::unique_lock
.
使用这些类的常用方法是锁定std::mutex
任何锁.这可以防止因异常抛出而导致的互斥量泄漏:
{
std::lock_guard<std::mutex> l(some_mutex);
//Cannot leak mutex.
}
Run Code Online (Sandbox Code Playgroud)
为什么std::mutex::lock
和std::mutex::unlock
公开?这要求使用不正确:
{
some_mutex.lock();
//Mutex leaked due to exception.
some_mutex.unlock();
}
Run Code Online (Sandbox Code Playgroud)
制作std::lock_guard
和std::unique_lock
朋友std::mutex
制作std::mutex
锁定操作是不是更安全?这样可以防止不安全的使用.
我猜这个设计的唯一原因是,如果我有自己的锁,它就无法使用,std::mutex
因为我无法成为我自己的锁友std::mutex
.这是将这些成员函数公开的主要原因吗?
问题很简单:看看代码.两个静态断言都通过了.我不希望第二个通过.这是一个错误还是正常行为?
#include <array>
#include <type_traits>
template <template <class...> class Temp, class Specialization>
struct IsSpecialization : std::false_type {};
template <template <class...> class Temp, class... Ts>
struct IsSpecialization<Temp, Temp<Ts...>> : std::true_type {};
template <class...Args>
struct A {};
template <class...Args>
using AT = A<Args...>;
int main() {
static_assert(IsSpecialization<A, A<int>>{});
static_assert(!IsSpecialization<AT, AT<int>>{});
}
Run Code Online (Sandbox Code Playgroud) 我试图看一下r7rs的状态,但我在计划报告页面等中找不到任何信息,只是2013年的一次演讲.我搜索谷歌也没有成功.
谢谢.
我有一个设备可以传输一些事件.我想使用反应式扩展来模拟以下行为:
我知道如何等待加密狗连接(1.):
auto waitForDongle = events.take_while([](auto const & event) {
return event == DongleConnected
}).subscribe([](auto) {});
Run Code Online (Sandbox Code Playgroud)
我知道如何捕获流(2.):
auto streamMotionData = events.take_while([](auto const &) { return !keyboardPressed(); })
.map([](auto const & evt) -> boost::optional<std::vector<double>> {
...
return data;
}).subscribe([](vector<double> const &) { ...});
Run Code Online (Sandbox Code Playgroud)
我的问题是我不知道如何组合流以便回到1.以及之后2.我只知道如何一次又一次地执行此操作.但我想要上述行为.
问题很简单.
这是模板化operator = for的声明std::any
:
template<typename ValueType>
any& operator=( ValueType&& rhs );
Run Code Online (Sandbox Code Playgroud)
我希望它是:
template<typename ValueType>
any& operator=( ValueType&& rhs ) noexcept(noexcept(std::declval<std::any>() = std::forward<ValueType>(std::declval<ValueType>()));
Run Code Online (Sandbox Code Playgroud)
也就是说,如果您可以以noexcept方式将ValueType复制分配给任何一个,那么您应该能够使用noexcept.
也许我错过了什么.
我的计划的事实
task_scheduler
在自己的线程中运行,您可以在其中提交轻量级任务.我们称之为task_scheduler-thread.task_scheduler
线程发出一个回调.我们称之为task_scheduler-tick-callback.我想做的事
我想在发出task_scheduler-tick-callback时加载一个sprite ,但是我不能从那个线程中执行它,所以我必须提交一些由cocos2d-x线程执行的工作.
问题
任何模式?
编辑:想法 - >在cocos2d-x中为每个循环迭代调用的任何回调函数?那存在吗?我可以集成在调用我的工作片那样.
我最近对DSL很感兴趣,特别是如何在Lisp中实现它们,因为它看起来像是替代品中的小菜一碟.
寻找信息我在互联网上的Lisp中找不到任何非lisp DSEL的证据.
所以我的问题是:
这是如何实现的?
lisp的读者可以用自定义读取器替换,将代码转换为lisp结构吗?
我正在使用精彩的org-babel包用于emacs.
我想为C++代码生成一些没有主函数的代码,但我无法弄清楚如何去做.
#+begin_src C++ :tangle MyClass.h
namespace ns {
class MyClass {};
}
#+end_src
Run Code Online (Sandbox Code Playgroud)
这将产生:
int main() {
namespace ns {
class MyClass {};
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法可以指示org-babel不生成主要功能?我无法在任何地方找到任何文档或提示.
任何允许我内联org文件中的代码并在没有评估的情况下纠缠它的替代方案对我当前的问题也是一个解决方案.
我只是尝试使同一帧中的两个块一次显示一个,同一帧,但投影仪应该生成 2 张幻灯片。我不知道怎么办。orgmode的文档对我来说还不够。
我将非常感激了解如何在某个时刻暂停幻灯片,...
如果可能的话,与 Pandoc 中的一样。我不确定在使用投影仪的组织模式下这是否可能。
我的例子如下:
我有这样的东西,我希望一次显示每个列。我的设置是H:3
针对帧级别的。
*** Continuous integration with Jenkins
:PROPERTIES:
:BEAMER_env: theorem
:END:
**** Jenkins
:PROPERTIES:
:BEAMER_col: 0.65
:END:
[[./jenkins-dashboard.png]]
**** Jenkins
:PROPERTIES:
:BEAMER_col: 0.35
:END:
#+ATTR_BEAMER: :overlay +-
- contiuosly building
- latest failure
- latest success
- build durations
Run Code Online (Sandbox Code Playgroud)
http://orgmode.org/worg/exporters/beamer/tutorial.html中的“3.4 使用 Babel”中的示例根据我的需要进行了调整(更改了帧级别)似乎也不起作用。
我boost.future<T>
在 boost 1.56 中使用了 continuation。
我有一个返回未来的 API,我想从延续内部使用它。所以理论上,我需要.unwrap
在链接第二个延续之前的未来。
所以我执行以下操作:
auto result = api_returns_future().then([](boost::future<R> && result) {
do_something_with_result();
//Note I could call .get() here, but I don't
return api_returns_future();
}).unwrap() //Now I unwrap the future here
.then([](boost::future<R> && result) { ... });
Run Code Online (Sandbox Code Playgroud)
也就是说,我有:
future<R>::then
boost::future<R>
,然后我解开它。题:
return api_returns_future().get()
注意我.get()
直接从延续内部调用`并放弃解包?。这个替代方案是否对我的代码的异步性有一些缺点?编辑:我更新了问题以更好地反映经过更多研究后我想问的问题。
谢谢
我试图将其减少到最低限度:
#include <array>
template <std::size_t N>
void f(int, std::array<int, N> const & =
std::array<int, 0>()) {
}
int main() {
f(10);
}
Run Code Online (Sandbox Code Playgroud)
array_test.cpp:4:6:注意:模板参数推断/替换失败:array_test.cpp:10:9:注意:无法推导出模板参数'N'f(10);
为什么这会失败?我不明白:它应该可以从默认参数中推断出来.我需要一个解决方法.
c++ ×10
c++11 ×4
boost ×2
c++14 ×2
emacs ×2
org-mode ×2
scheme ×2
templates ×2
any ×1
asynchronous ×1
asyncsocket ×1
beamer ×1
boost-asio ×1
c++17 ×1
cocos2d-x ×1
common-lisp ×1
concurrency ×1
dsl ×1
guile ×1
latex ×1
noexcept ×1
org-babel ×1
r7rs ×1
report ×1
rxcpp ×1
stdarray ×1
template-argument-deduction ×1
type-alias ×1
unique-ptr ×1