我有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来实现解决方案.我不能使用除标准库之外的任何东西.
我已经开始使用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:找到解决方案,看看我的答案.
我最近开始学习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的值?
让我们假设我有一个带有以下签名的函数:
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.