Пакет параметров функции шаблона находится не в конце списка

String[] split = data.split("\\|",-1);

Это не фактическое требование за все время. Недостаток выше показан ниже:

Scenerio 1:
When all data are present:
    String data = "5|6|7||8|9|10|";
    String[] split = data.split("\\|");
    String[] splt = data.split("\\|",-1);
    System.out.println(split.length); //output: 7
    System.out.println(splt.length); //output: 8

Когда отсутствуют данные:

Scenerio 2: Data Missing
    String data = "5|6|7||8|||";
    String[] split = data.split("\\|");
    String[] splt = data.split("\\|",-1);
    System.out.println(split.length); //output: 5
    System.out.println(splt.length); //output: 8

Реальное требование - длина должна быть 7, хотя отсутствуют данные. Потому что есть случаи, когда мне нужно вставить в базу данных или что-то еще. Мы можем достичь этого, используя подход ниже.

    String data = "5|6|7||8|||";
    String[] split = data.split("\\|");
    String[] splt = data.replaceAll("\\|$","").split("\\|",-1);
    System.out.println(split.length); //output: 5
    System.out.println(splt.length); //output:7

Что я здесь сделал, я удаляю «|» трубы в конце, а затем разделение строки. Если у вас есть «,» в качестве разделителя, вам нужно добавить «, $» внутрь replaceAll.

0
задан Fabio 8 March 2019 в 12:02
поделиться

1 ответ

Аргументы шаблона Variadic являются жадными, поэтому, если вы попытаетесь явно указать аргументы шаблона для шаблона, который имеет переменный аргумент, после того, как явные аргументы начнут выделяться пакету переменных, все остальные аргументы выделяются этому пакету. В этом случае A2 не является типом, поэтому, когда компилятор пытается выделить его для пакета Ts..., это вызывает ошибку.

Вы можете перегрузить ваш шаблон, указав enum в качестве первого параметра:

template <A a,typename...Ts >
void foo(Ts...ps) { std::cout << sizeof...(ps); }
template <typename...Ts>
void foo(Ts...ps) { foo<A2>(ps...); }

foo<int,int>(1,2);     // this compiles
foo<A2,int,int>(1,2);  // this compiles
0
ответ дан Anthony Williams 8 March 2019 в 12:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: