小编Pao*_*tto的帖子

是否可以使用默认的泛型参数在C++中定义lambda?

是否可以使用默认的泛型参数在C++中定义lambda?

int main(){
    auto lambda = [](auto i = 0){return i;};
    std::cout<<lambda()<<"\n"; // this does not compile
    std::cout<<lambda(4)<<"\n"; // this does compile
    auto lambda2 = [](int i = 0){return i;};
    std::cout<<lambda2()<<"\n"; // this is also OK
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有可能重现类似这个仿函数的东西,为什么不呢

struct Lambda{
    template<typename T=int>
    auto operator()(T i=1){ return i;}
};
Run Code Online (Sandbox Code Playgroud)

c++ lambda auto c++11 c++14

11
推荐指数
1
解决办法
342
查看次数

用于SoA/AoS内存布局的C++零成本抽象

假设我有一个使用Array of Structures(AoS)内存布局的大代码.我想在C++中构建一个零成本的抽象,它允许我在尽可能少的重构努力之间切换AoS和SoA.例如,使用具有访问成员函数的类

 struct Item{
   auto& myDouble(){ return mDouble; }
   auto& myChar(){ return mChar; }
   auto& myString(){ return mString; }
 private:
   double mDouble;
   char mChar;
   std::string mString;
 };
Run Code Online (Sandbox Code Playgroud)

它在循环中的容器内使用

std::vector<Item> vec_(1000);
for (auto& i : vec_)
  i.myDouble()=5.;
Run Code Online (Sandbox Code Playgroud)

我想改变第一个片段,而第二个片段保持相似...例如,有类似的东西

MyContainer<Item, SoA> vec_(1000)
for (auto& i : vec_)
  i.myDouble()=5.;
Run Code Online (Sandbox Code Playgroud)

我可以使用"SoA"或"AoS"模板参数选择内存布局.我的问题是:这样的事情存在于某个地方吗?如果没有,最好如何实施?

c++ abstraction design-patterns data-oriented-design template-meta-programming

5
推荐指数
1
解决办法
1132
查看次数

如何在 VSCode 上设置数据断点(即观察点)

我不是 VSCode 的专家,但我看到从 1.38 版开始,可以添加观察点(修改给定内存区域时中断的断点,许多调试器支持的功能),至少对于 C/C++ ,请参阅此处https://jaxenter.com/vs-code-1-38-161797.html和此处https://github.com/microsoft/vscode/issues/58304。现在我的VSCode版本是1.48.2,还是不知道怎么弄,也找不到合适的解释。如果有人可以解释如何做(或是否可行),那肯定对我和 VSCode 社区都非常有益。

c c++ debugging visual-studio-code vscode-debugger

5
推荐指数
1
解决办法
1588
查看次数

如何在CMake中查询目标是否是INTERFACE库

在现代 CMake 中,可以将库指定为INTERFACE:它不生成构建输出,但它可以具有与其关联的属性,尽管并非所有属性都可以设置(例如FOLDER不支持该属性)。假设我有一个通用 CMake 宏为通用库目标设置属性,有没有办法告诉输入目标是接口库,以便我可以仅跳过该目标不受支持的属性?

cmake cmake-language

3
推荐指数
1
解决办法
1782
查看次数

SFINAE用于具有默认参数的函数对象

如果lambda(或函数对象)有默认参数,在编译时告诉最简单的方法是什么?例:

auto f = [](int i=0){};
auto g = [](int i){};
static_assert(has_default_arg<decltype(f)>::value==true);
static_assert(has_default_arg<decltype(g)>::value==false);
Run Code Online (Sandbox Code Playgroud)

c++ lambda sfinae template-meta-programming

2
推荐指数
1
解决办法
100
查看次数