Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates 无法解析模板函数的类型_Templates_D_Phobos - Fatal编程技术网

Templates 无法解析模板函数的类型

Templates 无法解析模板函数的类型,templates,d,phobos,Templates,D,Phobos,我正在尝试用D编写一些非常简单的代码,但是我在使用一个标准库模板函数时遇到了一些问题(特别是std.algorithm中的nextpermutat) 我要做的关键是创建所有泛数字的排列(也就是说,数字包括所有1到9的值,只需要一次) 为此,我做了以下工作: import std.algorithm; import std.conv; int[] pandigitals() { char[] initial = "123456789".dup; auto pan = [to!in

我正在尝试用D编写一些非常简单的代码,但是我在使用一个标准库模板函数时遇到了一些问题(特别是
std.algorithm
中的
nextpermutat

我要做的关键是创建所有泛数字的排列(也就是说,数字包括所有1到9的值,只需要一次)

为此,我做了以下工作:

import std.algorithm;
import std.conv;

int[] pandigitals()
{
    char[] initial = "123456789".dup;
    auto pan = [to!int(initial)];
    while(nextPermutation!(initial)) {
       pan ~= to!int(initial);
    }
    return pan;
}
这给了我一个错误:

错误:无法解析NextPermutate的类型!(首字母)

我还尝试显式设置类型:

while(nextPermutation!("a<b", char[])(initial))

while(nextpermutate!)(好吧,你的第一个问题是你把
initial
作为模板参数而不是函数参数来传递。
!()
是模板参数。所以,不是

while(nextPermutation!(initial))
你需要做什么

while(nextPermutation(initial)) {
现在,这仍然会给你一个错误

q.d(10): Error: template std.algorithm.nextPermutation cannot deduce function from argument types !()(char[]), candidates are:
/usr/include/D/phobos/std/algorithm.d(12351):        std.algorithm.nextPermutation(alias less = "a<b", BidirectionalRange)(ref BidirectionalRange range) if (isBidirectionalRange!BidirectionalRange && hasSwappableElements!BidirectionalRange)

谢谢,我有一个
静态断言
,用于
isBidirectionalRange!(char[]);
但是忘记了
hasSwappableElements
约束。
int[] pandigitals()
{
    dchar[] initial = "123456789"d.dup;
    auto pan = [to!int(initial)];
    while(nextPermutation(initial)) {
       pan ~= to!int(initial);
    }
    return pan;
}