我可以使用參數創建模板函數,哪些類型取決於模板參數? (下面的代碼只是解釋,我想要什麼)類型取決於模板中的條件
#include <complex>
template <bool two>
void foo((if (two) ? double* : std::complex<double>* >) input, size_t n)
{
for (size_t i = 0; i < n; ++n)
input[i] *= two ? 2.0 : 1.0;
}
void foo_double(double *input, size_t n){
foo<true>(input,n);
}
void foo_complex (std::complex<double> *input, size_t n){
foo<false>(input,n);
}
我想std::condition
會有所幫助,但我想,我不知道如何正確地在這裏(下面的代碼不能編譯)
#include <type_traits>
#include <complex>
template <bool two>
void foo(std::conditional<two, double*, std::complex<double>* > input, size_t n)
{
for (size_t i = 0; i < n; ++n)
input[i] *= two ? 2.0 : 1.0;
}
void foo_double(double *input, size_t n){
foo<true>(input,n);
}
void foo_complex (std::complex<double> *input, size_t n){
foo<false>(input,n);
}
這將是非常好的,如果有人找到解決方案,而不是C++ 11高,所以我將能夠編譯它無論是在vs2012和使用gcc-6 +。但是一些使用C++ 14或更高版本的例子也是很好的體驗。
感謝=)
爲什麼你需要,甚至做到這一點?爲什麼不'template void foo(T input,size_t n){...}'? –
NathanOliver
'std :: conditional'是正確的選擇。你看過[docs](http://en.cppreference.com/w/cpp/types/conditional)看看如何使用它?如果您無法訪問C++ 11,則應該可以自己實現它(如果需要幫助,可以將其記錄下來)。 – Rakete1111
使用'std :: conditional'就像這樣:'std :: conditional :: type' –
qxz