如何静态断言 C++ lambda 的每个数据成员?

问题描述 投票:0回答:1

如何为任何给定 C++ lambda 的每个数据成员调用

static_assert

我想做的是推出我自己的 memcpy 功能

std::function
并意识到任何 lambda 都必须具有可简单复制的数据成员。我想为此提出一些断言。

示例:

template<typename T> struct has_trivial_copy {enum {value = false};};
template<> struct has_trivial_copy<int> {enum {value = true};};

int main() {
    int i = 0;
    std::string str;

    auto lambda1 = [i] {
        // static_assert(has_trivial_copy<each data member...>::value); // okay
    };

    auto lambda2 = [i, str] {
        // static_assert(has_trivial_copy<each data member...>::value); // fail
    };
}
c++ lambda member static-assert
1个回答
0
投票

虽然不可能为 lambda 的每个成员调用

static_assert
,但可以在任何给定的 lambda 上使用
std::is_trivially_copyable
来断言它是可简单复制的。

我已将以下

static_assert
添加到我的自定义
std::function
中,它可以很好地向我展示我在 lambda 中使用非平凡可复制数据成员的所有位置:

template <typename Functor, typename ReturnType, typename... Args>
struct FunctorHolder
{
    FunctorHolder (Functor func) : f (func)
    {
        static_assert(std::is_trivially_copyable<Functor>::value);
    }

    Functor f;
};
© www.soinside.com 2019 - 2024. All rights reserved.