是否有任何用例
target_link_libraries(my-lib x y z)
add_dependencies(my-lib x) # this is not just a waste of bytes?
Run Code Online (Sandbox Code Playgroud)
如果是这样,有人可以解释它会是什么吗?
auto lam = [](int a, int b, int c) { return a < b && b < c; };
struct functor {
int a;
int b;
bool operator()(int n) const { return a < n && n < b; }
};
Run Code Online (Sandbox Code Playgroud)
在第一版中,我们
std::vector<std::function<bool (int)>> lamvals;
// get parameters and for each
lamvals.emplace_back(std::bind(lam, a, std::placeholders::_1, b));
Run Code Online (Sandbox Code Playgroud)
替代方案是
std::vector<functor> lamvals;
// get parameters and for each
lamvals.emplace_back(functor{a, b});
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,我们都有一个简单的迭代
return std::any_of(lamvals.cbegin(), lamvals.cend(),
[n](const decltype(lamvals)::value_type & t){return t(n);});
Run Code Online (Sandbox Code Playgroud)
我看到速度差为3:1,绑定的lambda更慢.仿函数几乎与存储整数对和硬编码测试一样快.显然,硬编码对于生产代码没那么有用,因为会有几个函数在起作用,而不仅仅是在它们之间.但是,我可以选择许多仿函数或许多lambdas.后者是更少的代码行,看起来更干净,但我认为我无法承受这种速度差异; 此代码处于关键循环中.
我正在寻找加速建议.
以下编译.但是,有没有任何悬挂参考问题?
class Foo {
Foo(std::function<void(int)> fn) { /* etc */ }
}
void f(int i, Foo& foo) { /* stuff with i and foo */ }
Foo foo([&foo](int i){f(i, foo);});
Run Code Online (Sandbox Code Playgroud)
似乎工作.(真正的lambda当然更复杂.)
这是gcc std::count_if代码
template<typename _InputIterator, typename _Predicate>
typename iterator_traits<_InputIterator>::difference_type
count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred)
{
[snip]
typename iterator_traits<_InputIterator>::difference_type __n = 0;
for (; __first != __last; ++__first)
if (__pred(*__first))
++__n;
return __n;
}
Run Code Online (Sandbox Code Playgroud)
我的问题:使用它会更好(即更快)
__n += __pred(*__first); // instead of the if statement
Run Code Online (Sandbox Code Playgroud)
此版本始终执行添加,但不执行分支.
注意,这不是一个问题std::condition_variable::wait_for().我知道可以假装醒来.
我的程序的行为表明这个问题的答案是肯定的,但是对于condition_variable案例,STL文档非常清楚.至少在cppreference.com上,this_thread的正确答案似乎是否定的.
编译器是gcc 4.8.1,如果这是一个缺陷.
我正在尝试将类似层次结构的树(数据来自json)保存到我的数据库中.我正在尝试决定使用哪种数据库技术和技术来提高数据的读取效率.
我想在一些数据库中表示这些数据.我会写一次,但多次阅读.
阅读查询将是这样的 - 给我B3的孩子; 或者给我一个根节点的盛大孩子(D型)......等等.什么/如何以最有效的方式存储这些数据?
我正在尝试在包含原子的地图中构造一个对象,因此既不能复制也不能移动AFAICT.
我对C++ 参考的阅读是地图emplace应该能够做到这一点.但是由于已删除或不存在的构造函数,以下代码无法编译.使用make_pair没有帮助.
#include <atomic>
#include <unordered_map>
class Z {
std::atomic<int> i;
};
std::unordered_map<int, Z> map;
void test(void) {
map.emplace(0, Z()); // error
map[0] = Z(); // error
}
Run Code Online (Sandbox Code Playgroud)
这是可能的,如果没有,为什么不呢?
编辑:编译器是Linux上的gcc 4.8.1
当我尝试在下面的代码中从 unicode 转换为 utf8 时,会 发生错误“函数convert_from(character不同,未知)不存在” 。
select convert_from(artists, 'UTF8') from songs where
to_tsvector('simple',convert_from(artists, 'UTF8'))
@@ plainto_tsquery('simple','alizee')
limit 100
Run Code Online (Sandbox Code Playgroud)
“艺术家”列具有“TEXT”类型。
但当我跑步时
select convert_from(E'\u0422\u0438\u043c\u0430\u0442\u0438', 'UTF8');
Run Code Online (Sandbox Code Playgroud)
效果很好。
我该如何解决这个问题?我将不胜感激任何帮助。谢谢
我想要一系列宏来替换下面的代码
#ifdef FOO
return true;
#else
return false;
#endif
Run Code Online (Sandbox Code Playgroud)
喜欢的东西
return MAGICLY_EXPANDING_IFDEFINED_MACRO(FOO);
Run Code Online (Sandbox Code Playgroud)
你可以猜到,有很多FOO,足以将4行减少到1会很酷.但实际上它会用一行替换一个怪物开关语句.
我没有C/C++的背景知识.我刚刚开始使用其他语言学习Objective-C.
在哪些情况下,我应该使用常规ivars或属性的变量的静态声明?我这样做有什么用?
谢谢
这是一个难以理解的问题,我不确定它的正确用语是什么(如果有的话).我很好奇什么语言允许你在程序执行期间"构建"一个字符串,然后作为程序的一部分执行它.我所知道的唯一一种允许你这样做的语言是Snobol.
然而,阅读Tcl的维基百科条目,听起来它也可以做到这一点?
我一直认为这是一个很好的功能,即使它可能没有太多使用.谢谢.
PS:会用Snobol,Spitbol标记这个,但没有创建新标签的声誉.
programming-languages eval metaprogramming multistage snobol
我想要一个映射将字符串键映射到a std::function<T()>或std::function<T(int)>(但不是两个都给定键)的映射.我得到一个编译错误,似乎没有模板std::function<T(...)>.我希望能够使用lambdas作为值.
首先,以这种方式存储功能是否安全?其次,如果是这样,语法是什么?(当从地图中检索到函数时,函数是一元函数还是无效函数.)如果不是上述函数,那么什么是合理的替代方案?指针杀死了lambda的想法,对...
C++ 11没问题.
简化的 MN 连接表
CREATE TABLE dummy (
fkey1 int, /* omitting FK clause */
fkey2 int,
/* could also separate begin and end dates */
effective_dates_of_assignment daterange,
EXCLUDE /* WHAT GOES HERE?? */
)
Run Code Online (Sandbox Code Playgroud)
我想要一个明显的排除规则,即如果fkey字段相同,则日期不会重叠。(如果密钥不同,则不排除。)
到目前为止,我最好的想法是添加贡献的多维数据集模块并在所有三个字段上创建一个要点多列索引。但是,尽管它看起来像一个 3D 立方体,但其中两个立方体的重叠约束将会退化。那么这里发生的是
EXCLUDE USING gist (cube([fkey1, fkey2, lower(effective_dates_of_assignment)],
[fkey1, fkey2, upper(effective_dates_of_assignment)])
WITH &&)
Run Code Online (Sandbox Code Playgroud)
这个使用附加模块的解决方案对于相对常见的用例来说是否是最佳的?
c++ ×7
c++11 ×5
lambda ×2
performance ×2
postgresql ×2
stl ×2
c ×1
cmake ×1
database ×1
date-range ×1
eval ×1
gcc ×1
macros ×1
map ×1
multistage ×1
objective-c ×1
sleep ×1
snobol ×1
static ×1
std-function ×1
stdatomic ×1
stdmap ×1
thread-sleep ×1
tree ×1