小编Kri*_*abó的帖子

包含可变参数包的第一个可转换类型的别名的Struct

我有typename T1,我有一个参数包typename... Variadic.

我想创建一个结构,其中包含可以转换为using Type = ...参数包中第一个类型的使用别名T1.到目前为止,我尝试了以下内容:

template<typename T1, typename T2, typename... Variadic>
struct VariadicConvertibleType
{
    using Type = std::enable_if<std::is_convertible<T1, T2>::value, T2>::type;
};
Run Code Online (Sandbox Code Playgroud)

对于前两种类型,这可能是使用SFINAE的潜在解决方案,但我需要使用递归将其扩展到包中的所有类型.到目前为止,我的所有尝试都失败了,因为您无法将条件放入使用别名声明.否则可以使用类似的东西:

template<typename T1, typename T2, typename... Variadic>
struct VariadicConvertibleType
{
    using Type = std::is_convertible<T1, T2>::value ? T2 : VariadicConvertibleType<T1, Variadic...>::Type;
};
Run Code Online (Sandbox Code Playgroud)

我可以使用一切(包括)C++ 14来实现解决方案.我不能使用除标准库之外的任何东西.

c++ metaprogramming

6
推荐指数
1
解决办法
128
查看次数

Dart WebGL调试

我已经开始使用Dart和WebGL编写一些技术演示和测试,但我似乎无法弄清楚如何在Dart中调试WebGL.

Markus Notch(Minecraft的创造者)在抽搐时有一个直播,他也用Dart和WebGL编写了他的游戏,但是每当他搞砸了一些东西时,他在WebGL的控制台上都会出现错误记录并记录错误.例如,请查看1:13:30.可悲的是,我找不到在他的代码中进行调试的部分.

当然我可以使用getShaderParameter()和检查我的着色器中getProgramParameter()的错误然后使用适当的getInfoLog()方法获取错误日志,但是对于常规调试(例如检查INVALID_ENUM错误)我可以将错误作为整数获取getError()但不能将其转换为枚举,错误消息或任何人工可读的调试信息.

我试图查看web_gl.dart源代码,但在其中找不到任何允许调试的内容.

任何帮助将非常感谢.

编辑:基于Notch的答案Chromium(可能)会自动记录这些错误.但不适合我,在Chromium控制台为空时gl.getError()报告错误1280.:(

编辑2:找到解决方案,看看我的答案.

debugging webgl dart

4
推荐指数
2
解决办法
1038
查看次数

PHP:名称空间中的返回值声明

我最近开始学习PHP,因为我习惯使用强类型语言(C++,Java),我更喜欢使用类型提示和返回类型声明.但是,当我尝试对基元使用返回类型声明时,我得到一个致命的错误,声明我的函数没有返回正确的类型.

这是一个代码示例:

<?php
namespace Foo;

class Bar {

    public function bar() : boolean {
        return true;
    }

}

$bar = new Bar();
$bar->bar();

?>
Run Code Online (Sandbox Code Playgroud)

这将导致致命错误,声明Bar :: bar不返回Foo\boolean类型的值.所以我尝试通过将函数原型更改为:来求助于全局命名空间:

public function bar() : \boolean
Run Code Online (Sandbox Code Playgroud)

但后来我得到一个致命的错误,声明我的函数没有返回boolean类型的值.我想PHP正在全局命名空间中寻找一种名为boolean的类型,而不是原始类型.太好了,所以我该如何表明我希望我的函数返回一个原始类型boolean的值?

php php-7

4
推荐指数
1
解决办法
512
查看次数

自动类型推导并将lambda传递给std :: function参数

让我们假设我有一个带有以下签名的函数:

void foo(std::function<void(int&)>& bar);
Run Code Online (Sandbox Code Playgroud)

以下调用成功编译:

foo([](int& x) { ++x; });
Run Code Online (Sandbox Code Playgroud)

这也成功编译:

std::function<void(int&)> myFunction = [](int& x) { ++x; };
foo(myFunction);
Run Code Online (Sandbox Code Playgroud)

但是使用自动类型推导它突然无法编译:

auto myFunction = [](int& x) { ++x; };
foo(myFunction);
Run Code Online (Sandbox Code Playgroud)

AFAIK推导出的lambda类型未指定,但它应该作为一个functor/callable.我不明白的是,std::function<void(int&)>如果不允许将同一个lambda 作为同一类型的函数参数传递,怎么可能将相同的lambda分配给a?

在GCC v4.8.5上测试,用-std=c++11.

c++ lambda c++11

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

标签 统计

c++ ×2

c++11 ×1

dart ×1

debugging ×1

lambda ×1

metaprogramming ×1

php ×1

php-7 ×1

webgl ×1