函数调用中未使用的参数的模板参数推导
Template parameter deduction for parameters not used in function call
因此,我正在围绕OpenGL着色器程序编辑包装。我正在尝试修改它,以便使用模板来设置制服,因为它们几乎都是一样的。
我想要的最终结果是:
aProgram.set_Fglm("uformName", glm::vec3(0, 1, 2));
调用模板函数:
template<class T, void (*F)(GLint, GLsizei, const GLfloat*)>
void Shader::set_Fglm(const string& _name, const T& _value) {
// do stuff using F()
}
其中模板参数为CCD_ 1。目前,我在我的cpp文件中有代码:
template void Shader::set_Fglm<glm::vec3, gl::Uniform3fv>
(const string& _name, const glm::vec3& _value);
然而,目前发生的情况是,我得到了一个编译时错误,说Template参数F无法推导。所以,我想我需要的是一种方法,当我们收到类型为glm::vec3的参数时,我们总是想使用相同的gl函数。
如果可能的话,我也不会介意,例如,我需要调用类似aProgram.set_F3glm
的东西。但如果是这样的话,我怎么还会只写一次实现本身呢。我之前只存储了一个枚举,每个枚举都是统一的,然后会检查它,看看该调用什么函数,而set函数总是使用c指针。
如果这个措辞很糟糕,我很抱歉,但我真的不确定我在做什么。
你可以为此写一个特征,比如:
template <typename T> struct DefaultF;
// Specialization
template <>
struct DefaultF<glm::vec3>
{
static constexpr void (*Func)(GLint, GLsizei, const GLfloat*) = &gl::Uniform2fv;
};
template<class T, void (*F)(GLint, GLsizei, const GLfloat*) = DefaultF<T>::Func>
void Shader::set_Fglm(const string& _name, const T& _value) {
// do stuff using F()
}
示例
请注意,您可以删除模板参数F
,并在函数中直接使用DefaultF<T>::Func
。
相关文章:
- 函数调用中参数的顺序重要吗
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何用参数值调用函数(仅在运行时已知)
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 函数调用C++中的参数太少
- 将参数打包的参数传递到 std::queue 中,以便稍后使用不同的函数调用
- 根据参数数调用 mixin 基类的构造函数
- 使用并行参数向量调用元素向量的成员函数
- uncrustify:如何将多行 C 函数调用的参数组合到一行上?
- 函数调用中的参数过多
- 使用显式模板参数列表和 [temp.arg.explicit]/3 的函数调用的演绎失败
- 可变参数模板函数:调用没有匹配函数,std::endl
- 对可变参数函数的递归调用的链接器错误
- 宏函数调用缺少参数警告,即使给定了参数
- 具有不同类型的可选参数的调用方函数
- C++ 使函数调用依赖于模板参数
- 迭代器的模板参数:函数在调用时推断类型?
- 如果我提前将参数声明为变量而不是将它们内联写入函数调用,那有什么区别(在内存方面)?
- 链接可变参数函数调用
- 递归可变参数函数调用对简单 if.else 语句的性能