THRIFT-922. cpp: Convert protocol classes to use non-virtual functions

Updated the thrift protocol classes to use non-virtual calls for most
functions.  The correct implementation is determined at compile time via
templates now.  Only the base TProtocol class falls back to using
virtual function calls.

git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@1005135 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/cpp/src/protocol/TCompactProtocol.h b/lib/cpp/src/protocol/TCompactProtocol.h
index 1d940a2..77c4454 100644
--- a/lib/cpp/src/protocol/TCompactProtocol.h
+++ b/lib/cpp/src/protocol/TCompactProtocol.h
@@ -20,7 +20,7 @@
 #ifndef _THRIFT_PROTOCOL_TCOMPACTPROTOCOL_H_
 #define _THRIFT_PROTOCOL_TCOMPACTPROTOCOL_H_ 1
 
-#include "TProtocol.h"
+#include "TVirtualProtocol.h"
 
 #include <stack>
 #include <boost/shared_ptr.hpp>
@@ -30,7 +30,7 @@
 /**
  * C++ Implementation of the Compact Protocol as described in THRIFT-110
  */
-class TCompactProtocol : public TProtocol {
+class TCompactProtocol : public TVirtualProtocol<TCompactProtocol> {
 
  protected:
   static const int8_t  PROTOCOL_ID = 0x82;
@@ -86,7 +86,7 @@
 
  public:
   TCompactProtocol(boost::shared_ptr<TTransport> trans) :
-    TProtocol(trans),
+    TVirtualProtocol<TCompactProtocol>(trans),
     lastFieldId_(0),
     string_limit_(0),
     string_buf_(NULL),
@@ -99,7 +99,7 @@
   TCompactProtocol(boost::shared_ptr<TTransport> trans,
                    int32_t string_limit,
                    int32_t container_limit) :
-    TProtocol(trans),
+    TVirtualProtocol<TCompactProtocol>(trans),
     lastFieldId_(0),
     string_limit_(string_limit),
     string_buf_(NULL),