C++ 依赖模板的实现

C++ 依赖模板的实现,c++,templates,C++,Templates,下面是一段简单的代码: #include <iostream> #include <fstream> template<typename T> class A { public: T _v; template<unsigned short V> void init() { _v *= V; } void print(double txt) { std::cout << "Init

下面是一段简单的代码:

#include <iostream>
#include <fstream>

template<typename T>
class A {
    public:
        T _v;
        template<unsigned short V> void init() { _v *= V; }
        void print(double txt) { std::cout << "Initialized with ?? : " << txt << std::endl; }
};

int main() {
    A<double> foo;
    foo._v = 3.5;
    foo.init<2>();
    foo.print(foo._v);

    A<int> bar;
    bar._v = 2;
    bar.init<5>();
    foo.print(bar._v);
}
#包括
#包括
样板
甲级{
公众:
T_v,;
模板void init(){u v*=v;}
无效打印(双文本){std::cout单向:

template<typename T>
class A {
    public:
        T _v;
        unsigned short _v2;
        template<unsigned short V> void init() { _v2 = V;  _v *= V; }
        void print(double txt) { std::cout << "Initialized with "
            << _v2 << " : " << txt << std::endl; }
};
模板
甲级{
公众:
T_v,;
无符号短路_v2;
模板void init(){u v2=V;_V*=V;}

void print(double txt){std::cout有
typeid(txt).name()
,但它会因编译器而异。我希望输出是:“用2:7初始化,用5:10初始化”,而不是
T
的类型。哦,我觉得很愚蠢。
\u v2
是在编译时设置的吗?(即,如果我使用bool而不是
无符号short
,那么基于
\u v2
的所有条件语句会在编译时或运行时求值吗?)在第一个版本中,它是在运行时设置的。在第二个版本中,它是在编译时设置的。我不能使用选项2,因为当我创建
foo
bar
时,我先验地不知道
V
的值。在没有
a
的额外模板的情况下,是否可以在编译时设置
print
的行为o、 因为如果有人在调用init之前调用print呢?在这种情况下,print应该在编译时从哪里获取V的值?
template<typename T, unsigned short V>
struct A {
        T _v = V;
        void print(double txt) { std::cout << "Initialized with "
            << V << " : " << txt << std::endl; }
};