在模板参数列表中转发声明类型名称

时间:2019-07-04 14:45:59

标签: c++ templates c++17 typename non-type

我有一个带有以下签名的函数:

template<typename Container, auto First = 0, auto Last = Container::size()>
doSomething(const Container& containter){...}

有没有一种方法可以允许对模板参数进行重新排序,因此我可以像这样调用函数:

doSomething<3,5>(someContainer);

不必这样做:

doSomething<decltype(someContainer), 3,5>(someContainer);

如果我可以将someCountainer移到Last之后,这不是问题,但是Last的默认值是从Container派生的。有没有办法在模板参数列表中转发声明Container,或者实际上可以让我避免每次都添加decltype(...)的任何功能?

2 个答案:

答案 0 :(得分:7)

一种方法是重载:

function getPdf(){
 $pdf = SPDF::loadView('bilans.print',array(/*...*/));
 $pdf->setOption('lowquality', false);
 $pdf->setOption('disable-javascript', false);
 $pdf->setOption('margin-top', '20mm');
 $pdf->setOption('margin-bottom', '15mm');
 $pdf->setOption('header-html',$headerHtml);
 $pdf->setOption('header-line',true);
 $pdf->setOption('header-spacing',5);
 $pdf->setOption('footer-right','Page [page]/[topage]');
 $pdf->setOption('footer-line',true);
 $pdf->setOption('footer-spacing',2);
 $pdf->setOption('footer-font-size', '6');
 $pdf->setOption('cover', "<h1>Test</h1>");
 $pdf->setOption('outline', true);
 $pdf->setOption('toc', true);
 $pdf->setOption('toc-level-indentation', 1);
 $pdf->setOption('xsl-style- 
 sheet',base_path('vendor/wemersonjanuario/wkhtmltopdf- 
   windows/bin/64bit/').'toc.xsl');

 return $pdf->download("Bilan_".$tier->IdWinbooks."_".date('Ymd').".pdf");
}

答案 1 :(得分:5)

另一个虽然不那么优雅的方法是对System Preferences > Security & Privacy > Anywhere 使用一个定点值:

Last